题目地址:http://www.hustoj.com/oj/problem.php?id=1092

题目描述

Dave以某种方法获取了未来几天美元对德国马克的兑换率。现在Dave只有100美元,请编程序,使Dave通过几天的美元与德国马克的兑换后能得到最多的美元。

输入

第1行包含一个自然数n(l≤n≤I00),表示Dave所知道的兑换率的天数。
后面跟着n个自然数A (100≤A≤I000)。第i+l行的数A表示第i天的兑换率。它告诉那天他能用100美元购买A马克,或用A马克购买100美元。

输出

只有1行,输出Dave经过n天的兑换后能得到的最多的美元值。结果保留两位小数。注意不一定每天都需要兑换。
说明:由于实数运算存在误差,结果在0.05的误差范围内将被认为是正确的。

样例输入

3
100
150
200
5
400
300
500
300
250

样例输出

200.00 //用力错误,正常输出应该是100
266.66

提示

样例2说明:

第一天:100美元换成400德国马克

第二天:400德国马克换成133.3333美元

第三天:133.3333美元换成666.6666德国马克

第四天:不换

第五天:666.6666德国马克换成266.6666美元

解题思路:

使用动态规划记录每一天的历史的最大价值,然后最后根据历史价值求解!

package com.daxin;

import java.util.Arrays;
import java.util.Scanner; /**
* Created by Daxin on 2017/8/20.
* 动态规划
*/
public class MaxDollarValue {
public static void main(String[] args) { // Scanner cin = new Scanner(System.in);
// int n = cin.nextInt();
//
// int[] nums = new int[n];
//
// for (int i = 0; i < n; i++) {
// nums[i] = cin.nextInt();
// }
int[] nums = {400, 300, 500, 300, 250};
// int[] nums2 = {100, 150, 200};
// System.out.println(getMaxValue(nums1));
System.out.println(getMaxValue(nums)); } public static double getMaxValue(int[] nums) {
int len = nums.length;
double[][] table = new double[len][len + 1];//
table[0][1] = 1;
for (int i = 0; i < table.length; i++) { table[i][0] = nums[i];
} for (int i = 2; i < table[0].length; i++) { for (int j = 1; j < table.length; j++) { double noChange = table[j - 1][i - 1]; double change = noChange * nums[j - 1] * 1.0 / nums[j]; table[j][i] = noChange > change ? noChange : change; } } for(double []ds :table){
System.out.println(Arrays.toString(ds)); } return Math.floor(table[table.length - 1][table[0].length - 1] * 10000) / 100;
} }

  

1092: 最大价值(dollars) 算法 动态规划的更多相关文章

  1. 算法-动态规划 Dynamic Programming--从菜鸟到老鸟

    算法-动态规划 Dynamic Programming--从菜鸟到老鸟      版权声明:本文为博主原创文章,转载请标明出处. https://blog.csdn.net/u013309870/ar ...

  2. 算法-动态规划DP小记

    算法-动态规划DP小记 动态规划算法是一种比较灵活的算法,针对具体的问题要具体分析,其宗旨就是要找出要解决问题的状态,然后逆向转化为求解子问题,最终回到已知的初始态,然后再顺序累计各个子问题的解从而得 ...

  3. LeetCode探索初级算法 - 动态规划

    LeetCode探索初级算法 - 动态规划 今天在LeetCode上做了几个简单的动态规划的题目,也算是对动态规划有个基本的了解了.现在对动态规划这个算法做一个简单的总结. 什么是动态规划 动态规划英 ...

  4. LeetCode初级算法--动态规划01:爬楼梯

    LeetCode初级算法--动态规划01:爬楼梯 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.net ...

  5. C语言算法动态规划板子题汇总

    本篇博客仅为对动态规划基础问题的状态转移方程进行求解,然后给出对应的注释代码,有关题目的具体内容可在算法导论或网络上进行查看 目录 1.钢管切割(最小值) 2.两条流水线调度 3.多条流水线调度 4. ...

  6. [算法]动态规划(Dynamic programming)

    转载请注明原创:http://www.cnblogs.com/StartoverX/p/4603173.html Dynamic Programming的Programming指的不是程序而是一种表格 ...

  7. js 高级算法 - 动态规划

    主要是看了<数据结构与算法>有所感悟,虽然这本书被挺多人诟病的,说这有漏洞那有漏洞,但并不妨碍我们从中学习知识. 其实像在我们前端的开发中,用到的高级算法并不多,大部分情况if语句,for ...

  8. LeetCode初级算法(动态规划+设计问题篇)

    目录 爬楼梯 买卖股票的最佳时机 最大子序和 打家劫舍 动态规划小结 Shuffle an Array 最小栈 爬楼梯 第一想法自然是递归,而且爬楼梯很明显是一个斐波拉切数列,所以就有了以下代码: c ...

  9. Java算法——动态规划

    基本思想: 动态规划算法通常用于求解具有某种最优性质的问题(作用就是求最优解).在这类问题中,可能会有许多可行解.每一个解都对应于一个值,我们希望找到具有最优值的解.动态规划算法与分治法类似,其基本思 ...

随机推荐

  1. HDU1039 Easier Done Than Said?

    Problem Description   Password security is a tricky thing. Users prefer simple passwords that are ea ...

  2. Java中的Json序列化,不容忽视的getter

    在开发的过程中,经常会碰到和自己预期不一样的情况.有的时候自己去研究一下还是很有趣的.这两天在写java web的时候,碰到了一个对象序列化的问题. 问题重现 public class AjaxJso ...

  3. <EffectiveJava>读书笔记--01继承的使用注意

    1, 父类的构造器方法中不能调用能够被子类重写的方法. 分析: 当初始化一个子类时, 首先要初始化父类, 即调用父类的构造方法; 如果父类的构造方法中调用了可被重写的其它方法, 那么此时调用的其实是该 ...

  4. Android中的广播

    Android中的广播 广播接受器,可以比喻成收音机.而广播则可以看成电台. Android系统内部相当于已经有一个电台 定义了好多的广播事件,比如外拨电话 短信到来 sd卡状态 电池电量变化... ...

  5. XML 入门 - XML 系统教程(1)

    XML (Extensible Markup Language)指可扩展标记语言. 组成 <?xml version="1.0" encoding="UTF-8&q ...

  6. JavaScript获取客户端IP地址

    1. 第三方接口 1) 这里提供一个搜狐接口的地址:http://pv.sohu.com/cityjson?ie=utf-8 ,将这个js引入到页面即可得到returnCitySN. 2) api.i ...

  7. Log4Net .NET log处理

    1.NuGet 安装Log4Net. 2.新建一个Common的project,并且添加一个LogWriter的类: public class LogWriter { //Error log publ ...

  8. 线索化二叉树的构建与先序,中序遍历(C++版)

    贴出学习C++数据结构线索化二叉树的过程, 方便和我一样的新手进行测试和学习 同时欢迎各位大神纠正. 不同与普通二叉树的地方会用背景色填充 //BinTreeNode_Thr.h enum Point ...

  9. vue的一些坑(第一天)

    1:刚开始在创建项目的时候一直出现vue不是内部或外部命令 关于这个的解决方案网上给出的很多的解决方案是配置环境,这个我就不在赘述了: 但是我觉得那样太麻烦,就没用,只是重新 npm i vue-cl ...

  10. 从Javascript单线程谈Event Loop

    假如面试回答js的运行机制时,你可能说出这么一段话:"Javascript的事件分同步任务和异步任务,遇到同步任务就放在执行栈中执行,而碰到异步任务就放到任务队列之中,等到执行栈执行完毕之后 ...