题解:P13985 [PO Final 2023] 通胀 / Inflation
解题思路
其实这个问题可以这样想:每天我们都有两种选择:
- 把当天的数字当作百分点,直接加到当前通胀率上。
- 把当天的数字当作百分比,让当前通胀率乘以
1 + \text{数字} \div 100 。
为了得到最终的最大值,我们应该在每天选择那个能让通胀率变得更高的方式。
代码实现
#include <iostream>
#include <iomanip>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
double I;
cin >> I;
vector<double> arr(30);
for (int i = 0; i < 30; i++)
{
cin >> arr[i];
}
vector<double> dp(31);
dp[0] = I;
for (int i = 1; i <= 30; i++)
{
dp[i] = max(dp[i - 1] + arr[i - 1], dp[i - 1] * (1 + arr[i - 1] / 100.0));
}
cout << fixed << setprecision(10) << dp[30] << endl;
return 0;
}