题目描述

如果我们有面值为1元、3元和5元的硬币若干枚,如何用最少的硬币凑够11元?

思路问题

动态规划算法的核心是:每个子问题的状态和状态的转移方程。

状态是:dp[i] ,即凑够i元最少需要的硬币的个数

转移方程是:dp[i] = min(dp[i-C1]+1,dp[i-C2]+1,dp[i-C3]+1,……,dp[i-Cj]+1])

即,每个状态的值都是最小的那个。

编写代码

说明:通过递归函数dp_fun实现了对状态数组dp的初始化#include

using namespace std;

int coin[3] = {1,3,5};

int dp[12] ;

int min(int a,int b)

{

return (a

}

void dp_fun(int i,int num)

{

if(i == 0)

{

dp[i] = 0;

dp_fun(1,num);

return;

}

else

{

int MIN = 9999;

for(int j=0;j<3;j++)

{

if(i>=coin[j])

{

MIN = min(dp[i-coin[j]]+1,MIN);

}

}

dp[i] = MIN;

if(i == num)return;

else

dp_fun(i+1,num);

}

}

int main()

{

dp_fun(0,11);//表示要凑齐11元的硬币

for(int i=0;i<12;i++)

{

cout<

}

return 0;

}

输出结果:

凑齐0元,至少需要0枚硬币

凑齐1元,至少需要1枚硬币

凑齐2元,至少需要2枚硬币

凑齐3元,至少需要1枚硬币

凑齐4元,至少需要2枚硬币

凑齐5元,至少需要1枚硬币

凑齐6元,至少需要2枚硬币

凑齐7元,至少需要3枚硬币

凑齐8元,至少需要2枚硬币

凑齐9元,至少需要3枚硬币

凑齐10元,至少需要2枚硬币

凑齐11元,至少需要3枚硬币

上面的程序是用递归写的,比较长,下面在写一个用两层循环的:

talk is cheap ,show me the code:#include

using namespace std;

int coin[3] = {1,3,5};

int dp[12] ;

void dp_fun(int num)

{

dp[0] = 0;

for(int i=1;i<=num;i++)

{

dp[i] = 9999;

for(int j=0;coin[j]<=i&&j<3;j++)

{

if(dp[i-coin[j]]+1 < dp[i])

dp[i] = dp[i-coin[j]]+1;

}

}

}

int main()

{

dp_fun(11);//表示要凑齐11元的硬币

for(int i=0;i<12;i++)

{

cout<

}

return 0;

}

凑硬币算法C语言,《凑硬币》 动态规划算法入门相关推荐

  1. 最大子段和——用蛮力算法,分治策略,动态规划算法三种求法(C语言)

    目录 一.题目 二.算法求解 1.蛮力算法 伪代码 算法分析 程序 2.分治策略 伪代码 算法分析 程序 3.动态规划算法 伪代码 算法分析 程序 一.题目 设A=<a1,a2,...,an&g ...

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

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

  3. 算法 64式 8、动态规划算法整理_第1部分_1到15题

    1 算法思想 动态规划 1.1含义 把问题分解成多阶段或多个子问题,顺序求解各个子问题,最后一个子问题就是初始问题的解. 概念 阶段: 问题分成的顺序的几个环节.例如最长递增子序列中每个字符就是一个阶 ...

  4. 算法 64式 8、动态规划算法整理

    1 算法思想 动态规划 1.1含义 把问题分解成多阶段或多个子问题,顺序求解各个子问题,最后一个子问题就是初始问题的解. 概念 阶段: 问题分成的顺序的几个环节.例如最长递增子序列中每个字符就是一个阶 ...

  5. 妙趣横生的算法(c语言实现),妙趣横生的算法(C++语言实现) 带目录完整pdf[4MB]

    <妙趣横生的算法(C++语言实现)>内容丰富,生动有趣,寓教于乐,旨在帮助读者学习数据结构和算法的相关知识,从而开阔眼界,培养编程兴趣,提高编程能力,增强求职的竞争力.如果您想提高自己对算 ...

  6. 程序员的算法课(5)-动态规划算法

    前言 众所周知,递归算法时间复杂度很高为(2^n),而动态规划算法也能够解决此类问题,动态规划的算法的时间复杂度为(n^2).动态规划算法是以空间置换时间的解决方式. 一.什么是动态规划 动态规划(D ...

  7. 最近最久未使用页面置换算法C语言,LRU页面置换算法模拟-最近最久未使用置换算法...

    LRU页面置换算法模拟-最近最久未使用置换算法 LRU页面置换算法模拟-最近最久未使用置换算法|课程设计|计算机数据库课程设计 一.设计目的 1.用C语言实现最近最久未使用(LRU)置换算法. 2.了 ...

  8. java实现随机数生成算法_Java 语言实现的随机数生成算法

    广州疯狂软件学院拥有三大课程体系包括:java课程,android课程,ios课程,疯狂软件年终钜惠,报名java就业班,免费赠送基础班,名额有限,本月火热报名中,欢迎有志之士电话或者QQ咨询. [导 ...

  9. bwt比对算法 C语言,DNA比对算法:BWT

    DNA比对算法:BWT BWT算法,实质上是前缀树的一种实现.那么什么是前缀树呢? 一.前缀树 对于问题p in S?如果S=rpq,那么p为S前缀rp的一个后缀. 于是,为了判断p in S 是否成 ...

  10. 算法与程序设计(三):动态规划算法

    目录 一.概念 1.1 动态规划算法的基本要素 1.2 动态规划算法的步骤 二.举例 2.1 矩阵连乘问题 2.1.1 穷举法 2.1.2 动态规划法 2.1.3 例题 2.2 图像压缩问题 2.3 ...

最新文章

  1. 异步请求之XMLHttpRequest篇
  2. Laravel使用之七牛对象存储
  3. 翻译 | CSS网格(CSS Grid)布局入门
  4. oracle快速导出1t数据,使用sqluldr2快速高效大批量导出Oracle数据
  5. 1.初次运行git前的配置
  6. php phpass,ass.php · ciweiin/海洋cms 海洋影视管理系统 - 免费开源PHP - Gitee.com
  7. python3安装及加载gensim
  8. 【常用Dos命令操作】操作+图(1)
  9. [转]高负载并发网站架构分析
  10. 计算机硕士工资一览表
  11. TShockwaveFlash的安装及其属性和方法
  12. CodeForces - [ACM-ICPC Jiaozuo Onsite A]Xu Xiake in Henan Province(模拟)
  13. J2EE中用到的英语单词
  14. Microsoft 解决方案框架版本 3.0 概述
  15. 利用Flash获取摄像头视频进行动态捕捉
  16. AndroidP HIDL 转载
  17. 连不上虚拟机的mysql_主机连不上虚拟机数据库
  18. socket编程实现SMTP邮件客户端
  19. VMware中版本不兼容以及紧急模式解决
  20. QRect QRectF 的 adjust()及adjusted()

热门文章

  1. 阿里云虚拟主机和服务器的区别
  2. helm chart 快速入门
  3. “数据打通”不等于“数据共融”,智能数据营销解决方案了解一下
  4. 使用Windows命令行reg控制注册表键值
  5. 数据挖掘(一)A-Priori
  6. 一文带你由浅入深Netty异步非阻塞世界(持续更新~~~)
  7. 计算机管理十大突出问题,TPM设备管理十大问题
  8. Unity3D 2D设计小游戏移动幻影的实现
  9. 计算机任务管理器中的进程,Win7任务管理器中哪些进程可以关闭?
  10. 【从蛋壳到满天飞】JS 数据结构解析和算法实现-栈和队列