翻译:动态规划--找零钱 coin change

Posted 积少成多

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了翻译:动态规划--找零钱 coin change相关的知识,希望对你有一定的参考价值。

来自http://www.geeksforgeeks.org/dynamic-programming-set-7-coin-change/

对于整数N,找出N的所有零钱的表示。零钱可以用S={s1,s2,s3,..sm}表示,每种零钱的数量为无穷。请问有多少种找零的方法?

例如,

N = 4,S = {1,2,3},有四种找零方式{1,1,1,1},{1,1,2},{2,2},{1,3},return 4

N = 10,S= {2,5,3,6} ,有5中找零方式{2,2,2,2,2}, {2,2,3,3}, {2,2,6}, {2,3,5} and {5,5} return 5;

    典型的完全背包问题

1,找出子问题模型:为了统计所有s结果的数量,我们可以将问题分为两部分: 结果中不含有硬币sm,  结果中含有硬币sm

函数int count(int S[],int m,int n)计算结果的数量,
函数返回   S[0..m-1]组成的零钱     可以为N找零钱的   方法数

那么很显然可以等价于这两者的和 count(S,m-1,n) + count(S,m,n-S[m-1]),其中count[S,m-1,n]不包括S[m-1]这个硬币,count(S,m,n-S[m-1])包括了S[m-1]这个硬币。

==================

迭代计算子问题,使用递归的方法:

 

以上是关于翻译:动态规划--找零钱 coin change的主要内容,如果未能解决你的问题,请参考以下文章

算法:找零钱322. Coin Change

322. Coin Change

动态规划-硬币找零

动态规划之找零钱问题

README3动态规划之“找零钱”说明最优子结构怎么解决

动态规划法找零钱问题