PKU 3639 Exchange Rates
制約条件
n≦365
方針
dp[i][j]: i日目の取引を終えて、j = 0ならカナダドルj = 1なら米ドルが最大いくら持てるか
のO(n)のDPをすればいい。
入出力にcin, coutを使うと500msくらいかかってギリギリになる。
1セント未満が切り捨てられることを忘れててはまる。
ソースコード
int n; double r[400]; int dp[400][2]; int main() { while(cin >> n, n){ rep(i, n) cin >> r[i]; rep(i, n) dp[i][0] = dp[i][1] = 0; dp[0][0] = 100000; for(int i = 1; i <= n; i++){ dp[i][0] = max(dp[i - 1][0], (int)(dp[i - 1][1] * r[i - 1] * 0.97)); dp[i][1] = max(dp[i - 1][1], (int)(dp[i - 1][0] / r[i - 1] * 0.97)); } printf("%.2f\n", dp[n][0] / 100.0); } return 0; }