凑硬币算法C语言,《凑硬币》 动态规划算法入门
题目描述
如果我们有面值为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语言,《凑硬币》 动态规划算法入门相关推荐
- 最大子段和——用蛮力算法,分治策略,动态规划算法三种求法(C语言)
目录 一.题目 二.算法求解 1.蛮力算法 伪代码 算法分析 程序 2.分治策略 伪代码 算法分析 程序 3.动态规划算法 伪代码 算法分析 程序 一.题目 设A=<a1,a2,...,an&g ...
- 任务分配算法c语言程序,程序员算法基础——贪心算法
原标题:程序员算法基础--贪心算法 前言 贪心是人类自带的能力,贪心算法是在贪心决策上进行统筹规划的统称. 比如一道常见的算法笔试题跳一跳: 有n个盒子排成一行,每个盒子上面有一个数字a[i],表示最 ...
- 算法 64式 8、动态规划算法整理_第1部分_1到15题
1 算法思想 动态规划 1.1含义 把问题分解成多阶段或多个子问题,顺序求解各个子问题,最后一个子问题就是初始问题的解. 概念 阶段: 问题分成的顺序的几个环节.例如最长递增子序列中每个字符就是一个阶 ...
- 算法 64式 8、动态规划算法整理
1 算法思想 动态规划 1.1含义 把问题分解成多阶段或多个子问题,顺序求解各个子问题,最后一个子问题就是初始问题的解. 概念 阶段: 问题分成的顺序的几个环节.例如最长递增子序列中每个字符就是一个阶 ...
- 妙趣横生的算法(c语言实现),妙趣横生的算法(C++语言实现) 带目录完整pdf[4MB]
<妙趣横生的算法(C++语言实现)>内容丰富,生动有趣,寓教于乐,旨在帮助读者学习数据结构和算法的相关知识,从而开阔眼界,培养编程兴趣,提高编程能力,增强求职的竞争力.如果您想提高自己对算 ...
- 程序员的算法课(5)-动态规划算法
前言 众所周知,递归算法时间复杂度很高为(2^n),而动态规划算法也能够解决此类问题,动态规划的算法的时间复杂度为(n^2).动态规划算法是以空间置换时间的解决方式. 一.什么是动态规划 动态规划(D ...
- 最近最久未使用页面置换算法C语言,LRU页面置换算法模拟-最近最久未使用置换算法...
LRU页面置换算法模拟-最近最久未使用置换算法 LRU页面置换算法模拟-最近最久未使用置换算法|课程设计|计算机数据库课程设计 一.设计目的 1.用C语言实现最近最久未使用(LRU)置换算法. 2.了 ...
- java实现随机数生成算法_Java 语言实现的随机数生成算法
广州疯狂软件学院拥有三大课程体系包括:java课程,android课程,ios课程,疯狂软件年终钜惠,报名java就业班,免费赠送基础班,名额有限,本月火热报名中,欢迎有志之士电话或者QQ咨询. [导 ...
- bwt比对算法 C语言,DNA比对算法:BWT
DNA比对算法:BWT BWT算法,实质上是前缀树的一种实现.那么什么是前缀树呢? 一.前缀树 对于问题p in S?如果S=rpq,那么p为S前缀rp的一个后缀. 于是,为了判断p in S 是否成 ...
- 算法与程序设计(三):动态规划算法
目录 一.概念 1.1 动态规划算法的基本要素 1.2 动态规划算法的步骤 二.举例 2.1 矩阵连乘问题 2.1.1 穷举法 2.1.2 动态规划法 2.1.3 例题 2.2 图像压缩问题 2.3 ...
最新文章
- 异步请求之XMLHttpRequest篇
- Laravel使用之七牛对象存储
- 翻译 | CSS网格(CSS Grid)布局入门
- oracle快速导出1t数据,使用sqluldr2快速高效大批量导出Oracle数据
- 1.初次运行git前的配置
- php phpass,ass.php · ciweiin/海洋cms 海洋影视管理系统 - 免费开源PHP - Gitee.com
- python3安装及加载gensim
- 【常用Dos命令操作】操作+图(1)
- [转]高负载并发网站架构分析
- 计算机硕士工资一览表
- TShockwaveFlash的安装及其属性和方法
- CodeForces - [ACM-ICPC Jiaozuo Onsite A]Xu Xiake in Henan Province(模拟)
- J2EE中用到的英语单词
- Microsoft 解决方案框架版本 3.0 概述
- 利用Flash获取摄像头视频进行动态捕捉
- AndroidP HIDL 转载
- 连不上虚拟机的mysql_主机连不上虚拟机数据库
- socket编程实现SMTP邮件客户端
- VMware中版本不兼容以及紧急模式解决
- QRect QRectF 的 adjust()及adjusted()