如果要求一个问题的最优解(通常是最大值或者最小值),而且该问题能够分解成若干个子问题,并且小问题之间也存在重叠的子问题,则考虑采用动态规划。

使用动态规划特征:1.求一个问题的最优解2.大问题可以分解为子问题,子问题还有重叠的更小的子问题,即整体问题最优解取决于子问题的最优解(状态转移方程)。

3.从上往下分析问题,从下往上解决问题4.讨论底层的边界问题

例1:硬币问题

我们有面值为1元3元5元的硬币各无数枚,如何用最少的硬币凑够21(这个值可以随意指定)元?

分析:

1.求问题的最优解:最小的硬币数

2.是否有子问题:假设f(n)表示凑够n元的最少硬币数。则显然,f(n)=min(f(n-1),f(n-3),f(n-5)) + 1;

3.确定最小问题的解。

f(1)=1, f(2)=2,  f(3)=1,f(4)=2,f(5)=1

4 从上往下分析问题,从下往上解决问题。

代码:

package dataStructureAndAlgorithms;

public class DaymicPrograming_findMinCoinNumber {

//从下往上的方法

public static int find(int n){

if(n<=5)

{

if(n == 1 || n==3 || n==5)

{

return 1;

}

else {

return 2;

}

}

int[] minNumber = new int[n+1];

minNumber[1] = minNumber[3] = minNumber[5] = 1;

minNumber[2] = minNumber[4] = 2;

for(int i=6;i<=n;i++){

minNumber[i] = min(minNumber[i-1],minNumber[i-3],minNumber[i-5]) + 1;

}

return minNumber[n];

}

public static int min(int a, int b, int c){

return a

结果:

数额:1 最少硬币数:1

数额:2 最少硬币数:2

数额:3 最少硬币数:1

数额:4 最少硬币数:2

数额:5 最少硬币数:1

数额:6 最少硬币数:2

数额:7 最少硬币数:3

数额:8 最少硬币数:2

数额:9 最少硬币数:3

数额:10 最少硬币数:2

数额:11 最少硬币数:3

数额:12 最少硬币数:4

数额:13 最少硬币数:3

数额:14 最少硬币数:4

数额:15 最少硬币数:3

数额:16 最少硬币数:4

数额:17 最少硬币数:5

数额:18 最少硬币数:4

数额:19 最少硬币数:5

数额:20 最少硬币数:4

数额:21 最少硬币数:5

数额:22 最少硬币数:6

数额:23 最少硬币数:5

数额:24 最少硬币数:6

数额:25 最少硬币数:5

数额:26 最少硬币数:6

数额:27 最少硬币数:7

数额:28 最少硬币数:6

数额:29 最少硬币数:7

数额:30 最少硬币数:6

找零程序Java_动态规划——硬币找零问题(java)相关推荐

  1. 动态规划——硬币找零思路

    找零的两种问题 硬币找零问题,有两种.一种用贪心解决,一种用动态规划解决. 问题1:假设我们有 v1,v2,--,vn(单位是元)这些币值的硬币,它们的张数分别是 c1.c2.-, cn.我们现在要用 ...

  2. 动态规划——硬币找零和币值最大化问题

    一.硬币找零问题 1.问题 有面值为1元.3元和5元的硬币若干枚,给定一个输入面额,问如何采用最少的硬币数目,得到当前面额 2.思路 找出状态转移方程,每次可以拿取1元.3元或者5元的硬币,每次拿取, ...

  3. java 动态规划找零钱_初探动态规划——LeetCode找零钱问题

    1.简介: 在leetcode上刷题的时候,遇到了一道找零钱的动态规划题,后台测试用例很变态,必须把算法优化的很好才能通过.也借此机会好好的研究了一下动态规划.在下小白一个,大神轻喷. 2.题目如下: ...

  4. 动态规划实战--硬币找零问题

    上一篇文章上提到硬币找零的例子,现在我们实战动态规划就从硬币找零开始 问题描述: 给定 n 种不同面值的硬币,分别记为 c[0], c[1], c[2], - c[n],同时还有一个总金额 k,编写一 ...

  5. java动态规划凑硬币问题,详解动态规划最少硬币找零问题--JavaScript实现

    硬币找零问题是动态规划的一个经典问题,其中最少硬币找零是一个变种,本篇将参照上一篇01背包问题的解题思路,来详细讲解一下最少硬币找零问题.如果你需要查看上一篇,可以点击下面链接: 详解动态规划01背包 ...

  6. 硬币找零问题,动态规划基础,百度面试题

    问题描述:给出几种面值的硬币,要求用这几种硬币找零出所给零钱数,用的硬币数要最少. 过去我们用过贪心法解决此类问题,包括本人在百度面试时,也是用的贪心法(面试官对这个解答不满意),贪心法只适用于硬币特 ...

  7. Python数据结构20:动态规划:找零兑换问题的动态规划解法并显示使用的硬币组合

    在我们使用递归算法时,可能会出现规模庞大的重复计算,用一个中间表记录每个计算过的最优解法,就可以避免大量的重复计算.中间结果记录可以很好解决找零兑换问题.实际上,这种方法还不能称为动态规划,而是叫做& ...

  8. 硬币找零问题的动态规划实现

    一,问题描述 给定一组硬币数,找出一组最少的硬币数,来找换零钱N. 比如,可用来找零的硬币为: 1.3.4   待找的钱数为 6.用两个面值为3的硬币找零,最少硬币数为2.而不是 4,1,1 因此,总 ...

  9. Python 动态规划(DynamicProgramming)-硬币找零

    动态规划(DynamicProgramming)-硬币找零 文章目录 动态规划(DynamicProgramming)-硬币找零 1.动态规划 a.什么是动态规划 b.适用对象 2.硬币找零-Codi ...

最新文章

  1. MySQL出现同步延迟有哪些原因?如何解决?
  2. 5GS 协议栈 — PFCP 协议 — BAR 缓存行为规则
  3. C语言:用字符读取流和输出流来读写入数据。(文本文件)
  4. 将数组绑定到dropdownlist上
  5. java 匹配最后一次出现的字符_在Java中查找字符串中字符的最后一次出现
  6. 开发中常见的@NotNull,@NotBlank,@NotEmpty注解的区别
  7. java 返回语句_Java:“缺少返回语句”
  8. hashmap储存有向图_HashMap的存储结构及原理
  9. EndNote自定义引用格式和参考文献格式
  10. 解读Android日志
  11. 谱尼软件测试谱尼为网络安全护航
  12. 揭开均线系统的神秘面纱_揭开极限编程的神秘面纱,重新探讨“ XP蒸馏”,第2部分...
  13. 是对计算机系统或其他网络设备进行,计算机信息系统是由计算机及其相关的和配套的设备、设施(含网络)构成的,按照一定的应用目标和规则对信息进行()等处理的人机系统。...
  14. WSL2迁移与硬盘读写测试
  15. MFC错误0xc000007b 应用程序无法正常启动 的一种原因
  16. 【干货分享】一篇文章帮你搞定前端高频面试题
  17. 2023上海国际天然食用胶产业展览会暨发展大会
  18. Java中 -1l1是多少?
  19. bzoj1038 [ZJOI2008]瞭望塔(半平面交)
  20. Cris 的Python日记(三):循环语句

热门文章

  1. 18907 雪花雪花雪花
  2. WinHex(16进制编辑器)
  3. 【unity 保卫星城】--- 开发笔记08(UI轮盘)
  4. Mac电脑下好用的mac版远程控制远程桌面软件
  5. 关于使用群晖系统创建音乐外链的研究
  6. 关于rem移动端 html字体大小自适应设置的问题
  7. 《电路原理》清华公开课 week1 支路变量、元件、KCL、KVL
  8. Twitch,斗鱼的“万里知音”
  9. EduSoho v8.7.10 本地播放视频超时或者快进后网络错误导致视频下载中途失败。
  10. 动态规划系列(4)——不相邻数最大和