传送门:https://www.nowcoder.com/acm/contest/79#question
说是比赛题解,其实我只会前三题;
后面的一定补
T1
题意,在一个长度为n的时间内,问如何选择存款期限,使得收益最大。
dp
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; #define fi first #define se second double r[5]; double dp[30]; double ll(int n,int id,double a) { double t=1.0; for(int i=1;i<=n;i++) { t=t*(1+r[id]); } return t*a; } int main(){ int n; scanf("%d%lf%lf%lf%lf",&n,&r[1],&r[2],&r[3],&r[4]); memset(dp,0,sizeof(dp)); dp[0]=1.0; for(int i=1;i<=n;i++) { for(int j=1;j<=4;j++) { int nian=(j==4)?5:j; if(i>=nian) { dp[i]=max(ll(nian,j,dp[i-nian]),dp[i]); } } } printf("%.5lf\n",dp[n]); return 0; }