关闭

理财产品

标签: 编程Pascal
165人阅读 评论(0) 收藏 举报

【题目描述】
有一非闰年年初有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.
3
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:79443次
    • 积分:2865
    • 等级:
    • 排名:第13339名
    • 原创:170篇
    • 转载:22篇
    • 译文:0篇
    • 评论:12条
    博客专栏
    音乐