理财产品

【题目描述】
有一非闰年年初有100000元,有N个理财产品,每个理财产品用三个参数描述:购买时间,投资天数,年利息。每个时刻你只能拥有最多一件产品,求一年后最多可以获得多少钱。
【输入格式】
第1行一个整数N
接下来N行,每行为3个空格隔开的字符串A、B、C;A表示发行时间,格式为MMDD;B是一个整数,为投资天数,范围[10,300];C为最多2位小数,代表百分之几的年利息,范围[3,30]
【输出格式】
一个数,为年底最多可以获得的连本带利的资金数目,保留两位小数
【样例输入】
3
0101 100 4.5
0201 30 5
0402 50 7.8
【样例输出】
101483.84
【分析】
一维动态规划,设f[i]表示第i天可以获得的最大受益,注意最后输出f[366],因为题目求的是一年以后。

const
  month:array[1..12]of integer=(31,28,31,30,31,30,31,31,30,31,30,31);
var
  i,j,n,p:longint;
    a,b:array[0..1000001]of longint;
    f,c:array[0..1000001]of real;
begin
  readln(n);
    for i:=1 to n do begin
        readln(p,b[i],c[i]);
        c[i]:=c[i]/100;
        a[i]:=p mod 100;
        p:=p div 100;
        for j:=1 to p-1 do a[i]:=a[i]+month[j];
    end;
    f[1]:=100000;
    for i:=2 to 366 do begin
      f[i]:=f[i-1];
        for j:=1 to n do
          if (a[j]+b[j]=i)and(f[a[j]]*(1+c[j]/365*b[j])>f[i]) then f[i]:=f[a[j]]*(1+c[j]/365*b[j]);
    end;
    write(f[366]:0:2);
end.
posted @ 2016-08-29 10:19  JRX2015U43  阅读(216)  评论(0编辑  收藏  举报