• HDU1903 Exchange Rates


    Exchange Rates

    Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 157    Accepted Submission(s): 89


    Problem Description
    Now that the Loonie is hovering about par with the Greenback, you have decided to use your $1000 entrance scholarship to engage in currency speculation. So you gaze into a crystal ball which predicts the closing exchange rate between Canadian and U.S. dollars for each of the next several days. On any given day, you can switch all of your money from Canadian to U.S. dollars, or vice versa, at the prevailing exchange rate, less a 3% commission, less any fraction of a cent. 
    Assuming your crystal ball is correct, what's the maximum amount of money you can have, in Canadian dollars, when you're done? 
     


    Input
    The input contains a number of test cases, followed by a line containing 0. Each test case begins with 0 <d &#8804; 365, the number of days that your crystal ball can predict. d lines follow, giving the price of a U.S. dollar in Canadian dollars, as a real number. 
     


    Output
    For each test case, output a line giving the maximum amount of money, in Canadian dollars and cents, that it is possible to have at the end of the last prediction, assuming you may exchange money on any subset of the predicted days, in order. 
     


    Sample Input
    3 1.0500 0.9300 0.9900 2 1.0500 1.1000 0
     


    Sample Output
    1001.60 1000.00
     
      该题是一个简单的DP题,只需将每一天的最佳状态保留起来就可以了。动态方程是 dp[i][x] = Max( dp[i-1][x], dp[i-1][y] * 汇率 ), 其中的 i 代表天数,x, y 分别是0,1 代表美元和加拿大元。
      代码如下:
     1 #include <cstdio>
    2 #include <cstring>
    3 #include <cstring>
    4 #include <cmath>
    5 using namespace std;
    6
    7 double dp[500][2];
    8
    9 inline double Max( double x, double y )
    10 {
    11 if( x - y > 1e-6 )
    12 return x;
    13 return y;
    14 }
    15
    16 inline double to( double m, double xx )
    17 {
    18 return floor( m * xx * 0.97 * 100 ) / 100;
    19 }
    20
    21 int main()
    22 {
    23 int N;
    24 while( scanf( "%d", &N ), N )
    25 {
    26 double xx;
    27 memset( dp, 0, sizeof( dp ) );
    28 dp[0][1] = 1000.0; // 0号存储美元值,1号存储加元值
    29 for( int i = 1; i <= N; ++i )
    30 {
    31 scanf( "%lf", &xx );
    32 dp[i][0] = Max( dp[i-1][0], to( dp[i-1][1], 1.0 / xx ) );
    33 dp[i][1] = Max( dp[i-1][1], to( dp[i-1][0], xx ) );
    34 }
    35 printf( "%.2lf\n", dp[N][1] );
    36 }
    37 return 0;
    38 }

      

  • 相关阅读:
    自适应Simpson积分
    斜率优化
    ORM的单表增删改查
    MTV模型—urls和view
    迭代器与生成器
    s7day2学习记录
    s7day1学习记录
    AI车牌识别涉及哪些技术?它是如何改变行业的?
    技术分享:人脸识别究竟是如何完成的?
    TSINGEE青犀视频行人检测景区测试时视频流切换本地背景音乐无法播放问题优化
  • 原文地址:https://www.cnblogs.com/Lyush/p/2163969.html
Copyright © 2020-2023  润新知