钱币兑换(exchange)

问题描述:

Dave偶然获得了未来几天的美元(dollars)与马克(marks)之间的兑换率。例如Dave开始有100marks,请编写个程序帮助Dave找出最好的买卖marks或dollars的方案,使Dave最后一天有最多的marks。

输入格式:

输入文件的第一行有个自然数N, 1 ≤ N ≤ 100,表示Dave知道未来兑换率的天数。

下面N行每行有两个被空格分隔的自然数B和S, 100 ≤ B ≤ S ≤ 1000。第(i+1)行表示的和是第 i天的兑换率,表示这一天: 100个marks 可以买B个dollars,和S个dollars可以买100个marks。

输出格式:

只一行一个实数,表示最多可获得的marks,精确到小数后2位。

输入输出样例:

exchange.in

3

393 398

394 401

386 386

exchange.out

102.07

exchange.in

5

300 300

310 320

320 330

330 330

300 320

exchange.out

103.12

exchange.in

8

218 219

228 231

227 235

205 213

230 232

239 239

251 258

205 213

exchange.out

126.14

样例3的解释 (此处不用输出)

第1天: 100.0000 马克换成 228.0000 美元

第4天: 228.0000 美元换成 107.0422 马克

第7天: 107.0422 马克换成 268.6760美元

第8天: 268.6760 美元换成 126.1389 马克

【解题思路】

首先分天数为阶段,每一天手上的钱的多少由前一天手上的钱决定,要求如何拥有最多的马克,显然可以利用动态规划解题。

但是每一天的钱有一个单位,所以显然用一个一维数组来进行动态规划是不行的,

显然,根据钱币之间的兑换公式,可以写出状态转移方程。

f1[i]=max(f1[i-1],f2[i-1]/s[i]*100);//马克
f2[i]=max(f2[i-1],f1[i-1]*b[i]/100);//美元

【参考程序】

#include<iostream>
#include<cstdio>
#include<iomanip>
using namespace std;
int n,b[101],s[101];
double f1[101],f2[101];
int main()
{
freopen("exchange.in","r",stdin);
freopen("exchange.out","w",stdout);
cin>>n;
f1[0]=100;//初始有100马克
f2[0]=0;//有0美元
for (int i=1;i<=n;i++) cin>>b[i]>>s[i];
f1[1]=100;//第一天最多有100马克
f2[1]=b[1];//最多有b[1]美元
for (int i=2;i<=n;i++)
{
f1[i]=max(f1[i-1],f2[i-1]/s[i]*100);
f2[i]=max(f2[i-1],f1[i-1]*b[i]/100);
//动态规划
}
cout<<fixed<<setprecision(2)<<max(f1[n],f2[n]/s[n]*100);//保留小数位,求最大值
return 0;
}

【2018寒假集训 Day2】【动态规划】钱币兑换(exchange)(自己翻译的2333)的更多相关文章

  1. 【2018寒假集训 Day2】【2019.5.11更新】【动态规划】花店橱窗布置(FLOWER)

    花店橱窗布置(FLOWER) 提交文件名:flower 问题描述: 某花店现有F束花,每一束花的品种都不一样,同时至少有同样数量的花瓶,被按顺序摆成一行,花瓶的位置是固定的,从左到右按1到V顺序编号, ...

  2. 【2018寒假集训 Day2】【动态规划】又上锁妖塔

    又上锁妖塔 (tower.in/tower.out) [题目描述] 小D在X星买完了想要的东西,在飞往下一个目的地的途中,正无聊的他转头看了看身边的小A,发现小A正在玩<仙剑>,可是小A很 ...

  3. 【2018寒假集训 Day2】【动态规划】挖地雷

    挖地雷(Mine) 在一个地图上有N 个地窖(N<=200),每个地窖中埋有一定数量的地雷.同时,给出地窖之间的连接路径,并规定路径都是单向的,且从编号小的地窖通向编号大的地窖.某人可以从任一处 ...

  4. 【2018寒假集训 Day2】【动态规划】垃圾陷阱(挖坑等填,未完成)

    垃圾陷阱 (well) 卡门--农夫约翰极其珍视的一条Holsteins奶牛--已经落了到"垃圾井"中."垃圾井"是农夫们扔垃圾的地方,它的深度为D (2 &l ...

  5. 【2018寒假集训 Day2】【动态规划】抢金块

    抢金块 输入文件:gold.in 输出文件:gold.out 问题描述: 地面上有一些格子,每个格子上面都有金块,但不同格子上的金块有不同的价值,你一次可以跳S至T步 .如果S=2,T=4.你就可以跳 ...

  6. 【2018寒假集训 Day2】【动态规划】回文字

    回文字(palin) 问题描述: 如果一个单词从前和从后读都是一样的,则称为回文字.如果一个单词不是回文字,则可以把它拆分成若干个回文字.编程求一个给定的字母序列,最多要分割成几部分,使每一部分都回文 ...

  7. 【2018寒假集训 Day2】【动态规划】维修栅栏

    维修栅栏 问题描述: 小z最近当上了农场主!不过,还没有来得及庆祝,一件棘手的问题就摆在了小z的面前.农场的栅栏,由于年久失修,出现了多处破损.栅栏是由n块木板组成的,每块木板可能已经损坏也可能没有损 ...

  8. 【集训Day4 动态规划】【2018寒假集训 Day4 更新】蛙人

    蛙人 (ple) 蛙人使用特殊设备潜水.设备中有一个气瓶,分两格:一格装氧气,另一格装氮气.留在水中有时间的限制,在深水中需要大量的氧气与氮气.为完成任务,蛙人必须安排好气瓶.每个气瓶可以用它的重量和 ...

  9. 2022寒假集训day2

    day1:学习seach和回溯,初步了解. day2:深度优化搜索 T1 洛谷P157:https://www.luogu.com.cn/problem/P1157 题目描述 排列与组合是常用的数学方 ...

随机推荐

  1. 《ECMAScript6入门》笔记

    let和const命令 let命令 循环体的let变量只对花括号作用域可见,花括号外不可见 循环体的语句部分是一个父作用域,而循环体内部是一个单独的子作用域 let声明的变量不存在变量提升,未声明的使 ...

  2. javascript核心基础总结

    对<深入理解javascript原型和闭包系列>,<深入理解javascript系列>和<javascript深入系列>的学习总结 词法作用域 作用域就是,程序查找 ...

  3. MyBatis(4)-- 动态SQL

    如果使用JDBC或者类似于Hibernate的其他框架,很多时候要根据需要去拼装SQL,这是一个麻烦的事情.因为某些查询需要许多条件.通常使用其他框架需要大量的Java代码进行判断,可读性比较差,而M ...

  4. UART中的硬件流控RTS与CTS

    最近太忙了,没时间写对Ucos-II的移植,先将工作中容易搞错的一个知识点记录下来,关于CTS与RTS的. 在RS232中本来CTS 与RTS 有明确的意义,但自从贺氏(HAYES ) 推出了聪明猫( ...

  5. 超融合与传统IT架构对比:成本价格优势有哪些

    之前文章中,我们已经介绍了超融合给用户 IT 基础架构带来的各个方面的价值,其中成本只是超融合架构的优势之一.但很多用户还是会非常关心这个话题,希望能有更具体的了解,所以本文整理超融合和传统 FC S ...

  6. 在虚拟机上的关于Apache(阿帕奇)(4)基于域名访问网站

    这篇随笔是基于域名访问网站,和前后两篇文章基于ip和基于端口一起练习效果更好 首先配置网卡Ip地址与hosts文件 输入命令:  vi  /etc/hosts/ (每行只能写一条,格式为IP地址+空格 ...

  7. MIT线性代数:21.特征值和特征向量

  8. Spring Boot2 系列教程(二十一)整合 MyBatis

    前面两篇文章和读者聊了 Spring Boot 中最简单的数据持久化方案 JdbcTemplate,JdbcTemplate 虽然简单,但是用的并不多,因为它没有 MyBatis 方便,在 Sprin ...

  9. python手册学习笔记3

    笔记3 > http://www.pythondoc.com/pythontutorial3/datastructures.html 装饰器 def log(text): def decorat ...

  10. 关于swoole 定时器有时候无法清除的解决方法

    关于swoole 定时器有时候无法清除的解决方法 有时候start里面写个定时器 有时候你关闭进程的时候 发现定时器还是可以进行 目前只有重启服务器才可以 清除 还有就是ps -ef | grep p ...