传送门: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;
}
View Code

相关文章: