APCS 109/10 實作題第一題 題解

2020-10-21 15:49:41 by Akira

題目敘述

你有 \(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

子任務

  1. 50% : \(n = 2\)
  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]