【noi 2.6_2421】Exchange Rates(DP)

题意:起始有1000元美元,给出N天美元与加拿大元的汇率。问N天内可以不停的兑换,每次兑换需要收取3%的手续费,问可以得到的最大的美元数。

解法:直接用2个变量存第 i 天时手中是美元和加拿大元的最大数额。

注意——不知为何计算机储存小数时会吞掉小数部分,所以保留2位小数时要用先*100后的整型存,    最后答案再输出/100.0的实数。

 1 #include<cstdio>
 2 #include<cstdlib>
 3 #include<cstring>
 4 #include<iostream>
 5 using namespace std;
 6 
 7 const int N=370;
 8 double a[N];
 9 int mmax(int x,int y)
10 {   return x>y?x:y;   }
11 int main()
12 {
13     int n;
14     while (1)
15     {
16       scanf("%d",&n);
17       if (!n) break;
18       for (int i=1;i<=n;i++) scanf("%lf",&a[i]);
19       int c,u,cc,uu;
20       c=100000,u=0;
21       for (int i=1;i<=n;i++)
22       {
23         cc=c,uu=u;
24         c=mmax(c,(int)(uu*a[i]*0.97));
25         u=mmax(u,(int)(cc/a[i]*0.97));
26       }
27       printf("%.2lf\n",(double)(c/100.0));
28     }
29     return 0;
30 }

 

posted @ 2016-10-09 20:07  konjac蒟蒻  阅读(298)  评论(0编辑  收藏  举报