码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2016-05-25 18:37:50      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:

来自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

标签:

原文地址:http://www.cnblogs.com/li-daphne/p/5527799.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!