view plaincopy to clipboardprint?
#include <iostream>
using namespace std;
const int M=1000;
const int N = 3;
int coint[N];
int count[M+1];//count[i]表示凑合数量为i所需最少的钱币数量,则count[i]=min{count[i-coint[j]]+1},其中0<=j<=N-1
int trace[M+1];//每个表示count[i]在取最小值时的选择,即上式中的j
int dp_count(int m)
{
int i = 0;
int j = 0;
for(i=0;i<M+1;i++)
count[i]=0xffff;
count[0] = 0;
for(i=0;i<=m;i++)
{
for(j=0;j<N;j++)
if(coint[j]<= i && count[i-coint[j]]+1 < count[i])
{
count[i] = count[i-coint[j]]+1;
trace[i] = coint[j];
}
}
return count[m];
}
void print(int m)
{
if(m==0)
return;
else
{
cout << trace[m] << " ";
print(m-trace[m]);
}
}
int main()
{
int i=0;
for(i=0;i<N;i++)
cin>>coint[i];
int m;
cin >> m;
cout<<dp_count(m)<<endl;
print(m);
}
#include <iostream>
using namespace std;
const int M=1000;
const int N = 3;
int coint[N];
int count[M+1];//count[i]表示凑合数量为i所需最少的钱币数量,则count[i]=min{count[i-coint[j]]+1},其中0<=j<=N-1
int trace[M+1];//每个表示count[i]在取最小值时的选择,即上式中的j
int dp_count(int m)
{
int i = 0;
int j = 0;
for(i=0;i<M+1;i++)
count[i]=0xffff;
count[0] = 0;
for(i=0;i<=m;i++)
{
for(j=0;j<N;j++)
if(coint[j]<= i && count[i-coint[j]]+1 < count[i])
{
count[i] = count[i-coint[j]]+1;
trace[i] = coint[j];
}
}
return count[m];
}
void print(int m)
{
if(m==0)
return;
else
{
cout << trace[m] << " ";
print(m-trace[m]);
}
}
int main()
{
int i=0;
for(i=0;i<N;i++)
cin>>coint[i];
int m;
cin >> m;
cout<<dp_count(m)<<endl;
print(m);
}
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/clearriver/archive/2009/08/21/4471476.aspx
分享到:
相关推荐
包括源代码、测试用例表、结果截图和实验心得、。还有流程图。
代码中包含有详细注释,另外还附加了一份报告,关于这个问题的具体分析,具有很好的参考价值
动态规划之找零钱问题.zip
数组b[J]代表要找零的总数。 初始化b[0]=0; b[J]=min{b[J-a[k]]};1;((J-a[k])>=0) 程序中面值有1,3,4,6 存于a数组中 时间复杂度O(M*N) 输出总硬币数
本程序是用c#2008编写的,包括递归的有重复元素的排列问题和半数集问题,动态规划的导弹问题,贪心算法的找零钱问题。
简单的程序,会给你很大的启发,特别是初学者!希望对大家会有帮助
大学生创业方案可行性分析——以零钱君APP为例.pdf
主要介绍了java动态规划算法——硬币找零问题,结合实例形式分析了java动态规划算法——硬币找零问题相关原理、实现方法与操作注意事项,需要的朋友可以参考下
互联网金融对商业银行的影响以及应对措施——以“零钱通”为例.pdf
首先对兑换零钱问题进行了分析,证明了该问题满足动态规划的最优化原理,并给出了其动态规划解法;然后对本算法进行了时间复杂性和空间复杂性分析,得到时间复杂性由通常的动态规划算法的O(Mn2)提高到本算法的O(n3)...
【找零钱问题】一个小孩买了价值为33美分的糖,并将1美元的钱交给售货员。售货员希望用数目最少的硬币找给小孩。假设提供了数目有限的面值为25美分、10美分、5美分、及1美分的硬币。给出一种找零钱的贪心算法。
贪心算法 找零钱 c语言 简洁 绝对无误
找零钱问题:有6种面值的货币(100,50,20,10,5,1),给定一个钱的数目x,要求用最少的货币数目表示,相同面值的货币可以多次出现。
算法设计与分析 贪心算法 找零钱问题 算法设计与分析找零钱问题贪心算法 计算机专业
最少零钱问题,最少硬币问题,动态规划算法,找零钱问题,
leetcode找零钱问题动态规划 LeetCode 动态规划 一般解法 注意: 递归算法为从高到底, 动态规划算法为从底到高! 找到转移方程 题目 No.124 二叉树中的最大路径和 No.322 零钱兑换 回溯算法 一般解法 注意: 感觉有点...
硬币找零钱问题,求最小硬币数目,输出最小硬币数目,有文件输出操作.
C语言找零钱问题贪心算法 找零钱问题是一个经典的贪心算法问题。示例代码使用贪心算法从最大面额硬币开始尝试找零,以减少硬币数量。贪心算法并不总是找到最优解,但在许多情况下可以找到接近最优解的解。在实际应用...
2.【找零钱问题】一个小孩买了价值为33美分的糖,并将1美元的钱交给售货员。售货员希望用数目最少的硬币找给小孩。假设提供了数目有限的面值为25美分、10美分、5美分、及1美分的硬币。给出一种找零钱的贪心算法。
leetcode找零钱问题动态规划 2020.10.12开启每日刷题模式。这里记录每日刷题进展与代码目录情况~ 如果对时间复杂度的要求有 \loglog,通常都需要用到二分查找。 动态规划: 数据结构的存储方式只有两种:数组(顺序...