快轉到主要內容

人力分配

目錄

簡易題敘
#

一個公司有 \(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;
}
Piau 的筆記本
作者
Piau 的筆記本
希望我寫下來的東西能夠長久的記在我的腦中