人力分配

簡易題敘

一個公司有 n(1n100)n (1 \le n \le 100) 個員工,兩個工廠,各有一個計算收益的二次多項式,給你那兩個公式的係數,考慮所有分配員工的方式 ( 每個員工皆需分配到其中一個工廠 ),找出收益最大的組合,輸出最大收益。

範例測資:

  • 輸入
2 -1 3
4 -5 2
2
  • 輸出
11

概念講解

先宣告最大值,初始化為一個很小的數字。

int mx = -1e9;
錯誤

這邊因為 Y1Y_1Y2Y_2 可能是負的,所以 mx 不可以設為 0!

接著從 00n 枚舉第一個工廠可能的人數 X1X_1 ,第二個工廠的人數 X2X_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;
}