簡易題敘#
一個公司有 \(n (1 \le n \le 100)\) 個員工,兩個工廠,各有一個計算收益的二次多項式,給你那兩個公式的係數,考慮所有分配員工的方式 ( 每個員工皆需分配到其中一個工廠 ),找出收益最大的組合,輸出最大收益。
範例測資:
- 輸入
2 -1 3
4 -5 2
2
- 輸出
11
概念講解#
先宣告最大值,初始化為一個很小的數字。
int mx = -1e9;
錯誤
這邊因為 \(Y_1\) 跟 \(Y_2\) 可能是負的,所以 mx 不可以設為 0!
接著從 \(0\) 到 n 枚舉第一個工廠可能的人數 \(X_1\) ,第二個工廠的人數 \(X_2\) 則是全部的人數 n 減去工廠一的人數,把這兩個數代進公式並相加就可以求得這種分法的收益,最後跟答案取 max 即可。
for (int i = 0; i <= n; i++) {
int x1 = i, x2 = n - i;
int y1, y2;
y1 = a1 * x1 * x1 + b1 * x1 + c1;
y2 = a2 * x2 * x2 + b2 * x2 + c2;
mx = max(mx, y1 + y2);
}
範例程式碼#
#include <bits/stdc++.h>
using namespace std;
#define int long long
int a1, b1, c1, a2, b2, c2, n;
signed main() {
cin >> a1 >> b1 >> c1;
cin >> a2 >> b2 >> c2;
cin >> n;
int mx = -1e9;
for (int i = 0; i <= n; i++) {
int x1 = i, x2 = n - i;
int y1, y2;
y1 = a1 * x1 * x1 + b1 * x1 + c1;
y2 = a2 * x2 * x2 + b2 * x2 + c2;
mx = max(mx, y1 + y2);
}
cout << mx;
}
