APCS 109/10 實作題第一題 題解
2020-10-21 15:49:41 by
題目敘述
你有 \(n\) 名員工要分配到兩間公司,如果分配了 \(n_1\) 個員工到公司一 \(n_2\) 個員工到公司二,那麼總獲利就會是
\[(a_1 n_1^2 + b_1 n_1 + c_1) + (a_2 n_2^2 + b_2 n_2 + c_2)\]
給你 \(a_1, b_1, c_1, a_2, b_2, c_2, n\),求最大獲利。所有員工都必須分配出去,獲利可能為零或負值。
輸入格式
第一行有三個整數 \(a_1, b_1, c_1\)
第二行有三個整數 \(a_2, b_2, c_2\)
第三行有一個整數 \(n\)
\(1 \le n \le 100\) ; \(-1000 \le a_1, b_1, c_1, a_2, b_2, c_2 \le 1000\)
輸出格式
印出一行最大總獲利
範例輸入
1 2 3
3 2 1
100
範例輸出
30204
子任務
- 50% : \(n = 2\)
- 50% : 無限制
題解
C++ 參考解答
#include <iostream>
using namespace std;
int main() {
int a1, b1, c1, a2, b2, c2, n;
cin >> a1 >> b1 >> c1 >> a2 >> b2 >> c2 >> n;
int ans;
for (int n1 = 0; n1 <= n; n1++) {
int n2 = n - n1;
int y = a1 * n1 * n1 + b1 * n1 + c1 + a2 * n2 * n2 + b2 * n2 + c2;
if (n1 == 0 || y > ans) ans = y;
}
cout << ans << endl;
return 0;
}
Python 參考解答
a1, b1, c1 = map(int, input().split())
a2, b2, c2 = map(int, input().split())
n = int(input())
ans = 0
for n1 in range(n + 1):
n2 = n - n1
y = a1 * n1 * n1 + b1 * n1 + c1 + a2 * n2 * n2 + b2 * n2 + c2
if n1 == 0 or y > ans:
ans = y
print(ans)
[題解] [APCS] [APCS 109/10]