标签:one std print play register [1] 通过 自然数 alt
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; }
标签:one std print play register [1] 通过 自然数 alt
原文地址:https://www.cnblogs.com/kcn999/p/10804533.html