首页 > 其他分享 >美元汇率

美元汇率

时间:2023-02-17 15:32:25浏览次数:34  
标签:int max 美元 马克 美元汇率 100 dp


题目描述

在以后的若干天里戴维将学习美元与德国马克的汇率。编写程序帮助戴维何时应买或卖马克或美元,使他从100美元开始,最后能获得最高可能的价值。

输入输出格式

输入格式:

 

输入文件的第一行是一个自然数N,1≤N≤100,表示戴维学习汇率的天数。

接下来的N行中每行是一个自然数A,1≤A≤1000。第i+1行的A表示预先知道的第i+1天的平均汇率,在这一天中,戴维既能用100美元买A马克也能用A马克购买100美元。

 

输出格式:

 

输出文件的第一行也是唯一的一行应输出要求的钱数(单位为美元,保留两位小数)。

注意:考虑到实数算术运算中进位的误差,结果在正确结果0.05美元范围内的被认为是正确的,戴维必须在最后一天结束之前将他的钱都换成美元。

 

输入输出样例

输入样例#1: 复制


5 400 300 500 300 250


输出样例#1: 复制


266.67


 

Day 1 ... changing 100.0000 美元= 400.0000 马克
Day 2 ... changing 400.0000 马克= 133.3333 美元
Day 3 ... changing 133.3333 美元= 666.6666 马克
Day 5 ... changing 666.6666 马克= 266.6666 美元

贪心加动态规划 。 在汇率换算哪里有点不会换 ,数学太弱了。。。

一开始有 100美元

每一行的A 表示 100美元可以买A马克  , A马克也可以买100美元  ;
500
100美元可以买 500 马克 (1马克 0.2美元 ), 500马克可以买100美元 (1美元 5 马克)

           

    dp[i][0 ] = 表示第i天  美元的最大收益
    dp[i][1]  = 表示第i天  马克的最大收益
    

    dp[1][0] = 第一天美元收益 100 ,
    dp[1][1] = 400
    dp[2][0] = 第二天美元收益取决于第一天 当前汇率是 300 ,第一天如果没有换马克,( dp[1][0]) ,如果换成了马克,(dp[1][1] /a[i] )*100  

    dp[1][0] = 100  ;
    dp[1][1] = 400 ;
    dp[i][0] = max(dp[i-1][0] , (dp[i-1][1]/a[i] )*100 )
    dp[i][1] = max(dp[i-1][1] , dp[i-1][0] *a[i] /100)

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std ;
const int MAX = 1000005 ;
double dp[MAX][2] ;
int a[MAX] ;
int main()
{
int n ;
cin >> n ;
for(int i = 1 ; i<=n ;i++)
{
cin >>a[i] ;
}
dp[1][0] = 100 ; // 第一天美元的收益
dp[1][1] = a[1] ; // 第一天马克的收益
for(int i = 2 ; i<=n ; i++)
{
dp[i][0] = max(dp[i-1][0] ,(dp[i-1][1]/a[i])*100 );
dp[i][1] = max(dp[i-1][1] , dp[i-1][0]*a[i] /100) ;
}
printf("%.2f",max(dp[n][0],(dp[n-1][1]/a[n] )*100));

return 0 ;
}

 

 

标签:int,max,美元,马克,美元汇率,100,dp
From: https://blog.51cto.com/u_15970235/6064295

相关文章