题目链接:

http://tyvj.cn/p/1095

https://www.luogu.org/problem/show?pid=1968

描述

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

输入格式

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

输出格式

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

测试样例1

输入

5
400
300
500
300
250

输出

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 美元

解题思路(http://tyvj.cn/Solution/6521)

AC代码:

 1 #include <stdio.h>2 int main(void)3 {4     int i,n;5     double a[3],sum;6     scanf("%d",&n);7     sum = 100;8     scanf("%lf%lf",&a[0],&a[1]);9     for (i=0;i<n-1;i++)
10     {
11         if (a[0] > a[1])
12             sum *= (double)a[0]/a[1];
13         scanf("%lf",&a[2]);
14         a[0]=a[1];
15         a[1]=a[2];
16     }
17     printf("%.2lf\n",sum);
18     return 0;
19 }

可以参考阅读的代码(一):

 1 #include <stdio.h>2 #define max_data 1003 int main(void)4 {5     int i;6     int n;7     int a[max_data];8     double sum;9     scanf("%d",&n);
10
11     for (i = 0;i < n;++i)
12         scanf("%d",a + i);
13     sum = 100;
14
15     for (i = 0;i < n - 1;++i)
16         if (a[i] > a[i + 1])
17             sum *= (double) a[i] / a[i + 1];
18
19     printf("%.2lf\n",sum);
20
21     return 0;
22 }

可以参考阅读的代码(二):

来源:http://blog.csdn.net/wxf1995/article/details/6007723#

 1     #include<stdio.h>  2     #include<iostream>  3     using namespace std;  4     const int N=100;  5     double ans[N+1][2];//0维表示美元 1维表示马克   6     double num[N+1];//num[i]的马克可以在第i天换100美元   7     int n;  8     void input()  9     {
10         scanf("%d",&n);
11         for (int i=1;i<=n;i++)
12         {
13             scanf("%lf",&num[i]);
14         }
15         return;
16     }
17     void prime()
18     {
19         ans[0][0]=100.0;
20         for (int i=1;i<=n;i++)
21         {
22             ans[i][0]=ans[i-1][0];
23             ans[i][1]=ans[i-1][1];
24             for (int j=1;j<i;j++)
25             {
26                 ans[i][0]=max(ans[j][1]/num[i]*100.0,ans[i][0]);//换成美元
27             }
28             for (int j=0;j<i;j++)
29             {
30                 ans[i][1]=max(ans[j][0]*num[i]/100.0,ans[i][1]);//换成马克
31             }
32         }
33         printf("%.2lf",ans[n][0]);
34         return;
35     }
36     int main()
37     {
38         input();
39         prime();
40         return 0;
41     }  

本代码解析:

每一天所能拥有的最大的价值肯定要么是全马克,要么全是美元(不解释)

所以可以记录第i天所能拥有的最大马克数和美元数,来递推

ans[i][1]表示第i天所能拥有的最多的马克

ans[i][0]表示第i天所能拥有的最多的美元

自然

ans[i][1]=ans[i-1][1];

ans[i][1]=max(ans[j][0]*num[i]/100.0,ans[i][1]);//换成马克

ans[i][0]也同理

美元汇率【贪心算法练习题】相关推荐

  1. python【蓝桥杯vip练习题库】BASIC-19完美的代价(贪心算法)

    试题 基础练习 完美的代价 资源限制 时间限制:1.0s 内存限制:512.0MB 问题描述 回文串,是一种特殊的字符串,它从左往右读和从右往左读是一样的.小龙龙认为回文串才是完美的.现在给你一个串, ...

  2. 美元汇率问题 酒馆浪人的博客

    1251: 美元汇率(dollars) 时间限制: 1 Sec   内存限制: 128 MB 提交: 16   解决: 7 [ 提交][ 状态][ 讨论版] 题目描述 在以后的若干天里戴维将学习美元与 ...

  3. 暑期集训2:ACM基础算法 练习题C:CF-1008A

    2018学校暑期集训第二天--ACM基础算法 练习题A  --   CodeForces - 1008A Romaji Vitya has just started learning Berlanes ...

  4. 野生前端的数据结构练习(12)贪心算法

    参考代码可见:https://github.com/dashnowords/blogs/tree/master/Structure/GreedyAlogrithm 一.贪心算法 贪心算法属于比较简单的 ...

  5. 贪心算法+回溯算法+动态规划

    一.贪心算法 1.分饼干问题 #思路:排序加贪心 先让胃口小的孩子满足 class Solution:def findContentChildren(self, g, s):print('==g:', ...

  6. 任务分配算法c语言程序,程序员算法基础——贪心算法

    原标题:程序员算法基础--贪心算法 前言 贪心是人类自带的能力,贪心算法是在贪心决策上进行统筹规划的统称. 比如一道常见的算法笔试题跳一跳: 有n个盒子排成一行,每个盒子上面有一个数字a[i],表示最 ...

  7. LeetCode:贪心算法(30道经典题目)

    LeetCode:贪心算法 求解最优化的问题常常会有一系列的步骤,而每个步骤往往会面临着选择.贪心算法在每一步都做出最优解,寄希望于通过局部最优解来获得全局最优解.贪心算法往往是这种自顶向下的设计,先 ...

  8. 贪心算法(Greedy Algorithms)

    1.贪心法的设计思想 贪心算法在解决问题的策略上目光短浅, 只根据当前已有的信息就做出选择,而且 一旦做出了选择,不管将来有什么结果,这个选择都不会改变.换言之,贪心法并不是从整体最优考虑,它所做出的 ...

  9. Leetcode学习之贪心算法

    贪心算法理论基础 题目分类大纲如下: 什么是贪心 贪心的本质是选择每一阶段的局部最优,从而达到全局最优. 这么说有点抽象,来举一个例子: 例如,有一堆钞票,你可以拿走十张,如果想达到最大的金额,你要怎 ...

最新文章

  1. 人脸对齐--Face Alignment by Explicit Shape Regression
  2. 人工智能产业发展联盟公布首轮AI芯片基准评测结果,评估工具已开源
  3. Android的Recovery中font_10x10.h字库文件制作
  4. SAP S/4HANA Material 物料主数据的简单介绍
  5. sh(Spring+Spring mvc+hibernate)——BaseDao.java
  6. async和await理解代码
  7. pandas插入新列
  8. DNA序列 LOJ NOIP模拟赛 D1T1 字符串哈希
  9. 一次解决Linux内核内存泄漏实战全过程
  10. Java实现国密电子签章(itext+bouncycastle +sm3withsm2)
  11. 面试必问——你有什么问题问我吗
  12. R语言使用cor.test函数检验两个数值向量之间的相关性系数是否具有统计显著性、对相关性系数进行显著性检验、基于pearson相关性检验
  13. 设计的银行账户管理系统,增加一个VIP账户的管理
  14. 计算机无法识别出硬件,电脑检测不到硬盘,电脑硬件故障检测工具
  15. 【100%通过率】华为OD机试真题 Python 实现【整理扑克牌】【2022.11 Q4 新题】
  16. 大b和小b的区别是什么
  17. Android解析xml文件获取数据练习
  18. 又一个电商商城推荐【附源码】
  19. 商务社交网站在中国还有没有机会
  20. 【MATLAB】MATLAB快速入门编程技巧

热门文章

  1. android百度定位方式,Android 百度定位SDK
  2. 美丽的夕阳(小孩文章)
  3. matlab 进行非线性回归,5.利用Matlab编程进行非线性回归分析.doc
  4. 图形学/OpenGL/3D数学/Unity
  5. fsleyes -- 一款多功能影像数据查看器
  6. Git生成公钥、私钥以及ssh key配置
  7. 如何使用git 生成密钥?
  8. Python - 随机生成英文字母
  9. 【数据存储】signed,unsigned到底怎么区分?如何计算?
  10. 分享《生死狙击2》的大场景草渲染