開啟章節選單
人力分配
簡易題敘
一個公司有 個員工,兩個工廠,各有一個計算收益的二次多項式,給你那兩個公式的係數,考慮所有分配員工的方式 ( 每個員工皆需分配到其中一個工廠 ),找出收益最大的組合,輸出最大收益。
範例測資:
- 輸入
2 -1 3
4 -5 2
2
- 輸出
11
概念講解
先宣告最大值,初始化為一個很小的數字。
int mx = -1e9;
錯誤
這邊因為 跟 可能是負的,所以 mx
不可以設為 0!
接著從 到 n
枚舉第一個工廠可能的人數 ,第二個工廠的人數 則是全部的人數 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; }