caioj1063·动态规划入门(一维一边推1:美元和马克)
来源:互联网 发布:2016淘宝店不挣钱了吧 编辑:程序博客网 时间:2024/04/29 08:20
1063:动态规划入门(一维一边推1:美元和马克)
时间限制: 1 Sec 内存限制: 128 MB
题目描述
【问题描述】
今天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马克 能互换。
【输出文件】
一行,即最后一天晚上手里的美元数目(保留两位小数)。
输入
输出
样例输入
5
400
300
500
300
250
样例输出
266.67
提示
感受隐形路径
题外话断更良久。。。虽然说都是简单题刷水题是会长自信2333六校联考考完,,,物理生物药丸,暑假没看qwq
可爱的题解
动态规划的基本题
mymax函数比较最大值
用double是因为数据处理中会有小数出现所以一律用double
{
d[i]=mymax(d[i-1],m[i-1]*100.0/a[i]);
m[i]=mymax(m[i-1],d[i-1]*a[i]/100.0);
}
这一步便是此代码的核心,d表示美元的最佳选择,m为马克的最佳选择,d[i]更新为不换mark继承上一天或者更换mark,或者换mark,下一天又会用到刚刚更新的数据一直到最后。
m同理。一直做到最后一题输出dn即可
其中一条隐藏的路径
为什么这样做的能正解呢
这便是动态规划适用的性质之一
无后效性与最优子结构性
通俗易懂的说法
无后效性:后面发生的事件对已发生过的没有影响
最优子结构性:最优解一定包含子问题的最优解
*在本题中新一天是否决定换并不会对过去造成影响
*最终的最优解都取决于前一天的最优解
*故可用动态规划算法(Dynamic Programming)
这是一个开端,相信大家已经都清楚啦>_
#include<iostream>#include<cstdio>#include<algorithm>using namespace std;double mymax(double x,double y){ return x>y?x:y;} int main(){ double a[110],d[110],m[110]; int n; scanf("%d",&n); scanf("%lf",&a[1]); d[1]=100.0;m[1]=a[1]; for (int i=2;i<=n;i++){ scanf("%lf",&a[i]); d[i]=mymax(d[i-1],m[i-1]*100.0/a[i]); m[i]=mymax(m[i-1],d[i-1]*a[i]/100.0); } printf("%0.2lf\n",d[n]); return 0;}
- caioj1063·动态规划入门(一维一边推1:美元和马克)
- caioj1063:动态规划入门(一维一边推1:美元和马克)
- 【NOIP·TG2004】caioj1065·动态规划入门(一维一边推3:合唱队形)
- caioj1064·动态规划入门(一维一边推2:最长上升子序列)
- caioj1066· 动态规划入门(一维一边推4:护卫队)
- caioj1064:动态规划入门(一维一边推2:最长上升子序列)
- caioj1065:动态规划入门(一维一边推3:合唱队形)
- caioj1066:动态规划入门(一维一边推4:护卫队)
- 1063: 美元和马克(动态规划
- caioj·1070 动态规划入门(二维一边推3:字符距离)
- caioj·1069: 动态规划入门(二维一边推2:顺序对齐)
- 1064: 最长上升子序列(动态规划-一维一边推)
- 小白菜Oj-美元与马克-动态规划
- HDU2044 一只小蜜蜂... 动态规划入门-递推
- 动态规划入门<一>
- 动态规划 入门篇(一)
- 动态规划(一)入门例子
- 【动态规划】美元
- bzoj 1036(树链剖分)
- js 判断数据类型
- HttpServletWrapper 和 HttpServletResponseWrapper
- c++ functional object函数对象
- org.apache.ibatis.exceptions.PersistenceException: 的解决
- caioj1063·动态规划入门(一维一边推1:美元和马克)
- Android第五天之ListView列表视图
- webpack打包常见报错
- Eclipse中webapp部署到tomcat到路径
- map集合遍历
- Luogu 3387(tarjan+dp)(tarjan+SPFA)
- 某安全浏览器竟然也被查出高危漏洞?
- Mysql 优化方案
- 简易文件打包程序