P2721题解
思路:
本题需要使用动态规划实现。
设
当然还有几个需要注意的问题:
- 题目读入的时间格式为
MMDD,所以需要先算出到第i 月已经过去了多少天,再加上天数才是真正的购买时间。 - 理财产品收益的计算方式:设该产品的购买时间为
x ,投资天数为y ,年利息率为z ,那么该产品收益为dp_x \times [1+(z \div 100) \div 365] \times y 。Code:
#include<bits/stdc++.h> using namespace std; int st[10005],day[10005]; double lx[10005],dp[367]; const int mon[]={0,0,31,59,90,120,151,181,212,243,273,304,334}; int main(){ int n; cin>>n; for(int i=1,x;i<=n;i++){ cin>>x>>day[i]>>lx[i]; st[i]=mon[x/100]+x%100;//转换为真正的购买时间 } dp[1]=100000;//第一天最大收益为100000 for(int i=2;i<367;i++){ dp[i]=dp[i-1]; for(int j=1;j<=n;j++) if(st[j]+day[j]==i)//如果该理财产品刚好是第i天到期 dp[i]=max(dp[i],dp[st[j]]*(1+(lx[j]/100)/365*day[j]));//取最大收益 } printf("%.2lf",dp[366]); return 0; }