洛谷 P2721 小Q的赚钱计划

洛谷

这大概是我见过最水的紫题吧~ 洛谷标签赞一个!

题意:你有一年时间,把10w元存银行变成更多钱,在特定时间区间内,你会有一些利息,不过不可中途退出。

直接dp:st[i]表示区间左端点,ed[i]表示右端点,a[i]表示利率。

f[i]表示第i天的最大值。直接循环每天和每个套餐转移即可。

code:

#include <bits/stdc++.h>
using namespace std;

const int month[]={0,0,31,59,90,120,151,181,212,243,273,304,334,365};
double f[400]={100000},a[10010];
int n,st[10010],ed[10010];

int main()
{
    cin>>n;
    int x,y,d;double c;
    for (int i=1;i<=n;++i) {
        scanf("%2d%2d%d%lf",&x,&y,&d,&c);
        a[i]=c*0.01*(d/365.0)+1;
        st[i]=month[x]+y;
        ed[i]=st[i]+d-1;
    }
    for (int i=1;i<=365;++i) {
        f[i]=f[i-1];
        for (int j=1;j<=n;++j) {
            if (ed[j]!=i) continue;
            f[i]=max(f[i],f[st[j]-1]*a[j]);
        }
    }
    printf("%.2lf",f[365]);
    return 0;
}
posted @ 2018-09-02 21:20  fuyan0101  阅读(384)  评论(2编辑  收藏  举报