【题解】最大价值

题目描述

        Dave以某种方法获取了未来几天美元对德国马克的兑换率。现在Dave只有100美元,请编写一个程序,使Dave通过几天的美元与德国马克的兑换后能得到最多的美元。

 

输入格式

        第一行包含一个自然数n(1≤n≤100),表示Dave所知道的兑换率的天数。

        后面跟着n个自然数A(100≤A≤1000)。第i+1行的数A表示第i天的兑换率。它告诉Dave在那天他能用100美元购买A马克,或用A马克购买100美元。

 

输出格式

        只有一行,输出Dave经过n天的兑换后能得到的最多的美元值。结果保留两位小数。注意:Dave不一定每天都需要兑换。

        说明:由于实数运算存在误差,结果在0.05的误差范围内将被认为是正确的。

输入样例

3

300

150

200

输出样例

200.00

题解

         根据贪心的每次要么全部换完,要么不换,那我们分别记录第$i$天的美元最大值和马克最大值即可。

#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstdio>
#define MAXN 101

using namespace std;

int n;
double a[MAXN][2];
//[0] 美元
//[1] 马克

int main()
{
    scanf("%d", &n);
    a[0][0] = 100;
    double tmp;
    for(register int i = 1; i <= n; i++)
    {
        scanf("%lf", &tmp);
        a[i][0] = max(a[i - 1][0], a[i - 1][1] * 100 / tmp);
        a[i][1] = max(a[i - 1][1], a[i - 1][0] * tmp / 100);
    }
    printf("%.2lf", a[n][0]);
    return 0;
} 
参考程序

猜你喜欢

转载自www.cnblogs.com/kcn999/p/10804533.html