caioj1064 DP

【問題描述】
今天6:00起牀,我轉身發現枕頭邊有100美元。
出門的時候發現門口有家冰淇淋店,拉了很長的橫幅:“今天100美元和400馬克互換”
第二天的橫幅是:“今天100美元和300馬克互換”
第三天的橫幅是:“今天100美元和500馬克互換”
第四天的橫幅是:“今天100美元和300馬克互換”
第五天的橫幅是:“今天100美元和250馬克互換”

第五天的晚上,我靈光一閃,決定坐時光飛機回到第一天的上午6:00,準備發大財!
我是這麼做的:
Day 1 ... 用 100.0000 美元 換 400.0000 馬克
晚上我手裏拿着400.0000馬克安心睡覺了

Day 2 ... 用 400.0000 馬克 換 133.3333 美元
晚上我手裏拿着133.3333美元安心睡覺了

Day 3 ... 用 133.3333 美元 換 666.6666 馬克
晚上我手裏拿着666.6666馬克安心睡覺了

Day 4 ... 我手裏拿着666.6666 馬克 不換美元,因爲我知道明天換更好呀
晚上我手裏拿着666.6666馬克安心睡覺了

Day 5 ... 用 666.6666 馬克 換 266.6666 美元
晚上我手裏拿着266.6666美元偷笑,我賺了166.6666美元。厲害吧?你有時光機嗎?

第六天全世界都不使用馬克了,所以最後一天留在手裏的必須是美元!


【輸入文件】
第一行是一個自然數N,1≤N≤100,表示天數。
接下來的N行中每行是一個自然數a[i],1≤a[i]≤1000。
表示預先知道的第i天100美元 和 A馬克 能互換。
 
【輸出文件】

一行,即最後一天晚上手裏的美元數目(保留兩位小數)。


記錄每天最多在手裏的美元數和馬克數。

最後一天換成美元就好了。

#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
int n,a[1001];
double f[1001][3];
int main()
{
	scanf("%d",&n);
	f[0][1]=100;
	f[0][2]=0;
	for (int i=1;i<=n;i++)
	{
		scanf("%d",&a[i]);
		f[i][1]=max(f[i-1][1],f[i-1][2]*100/a[i]);
		f[i][2]=max(f[i-1][2],f[i-1][1]*a[i]/100);
	}
	f[n][1]=max(f[n][1],f[n][2]*100/a[n]);
	printf("%.2lf",f[n][1]);
	return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章