【发布时间】:2014-01-22 23:56:03
【问题描述】:
例子:
给定 20 美元,我想数一下用硬币兑换 20 美元的方法 = { 5$,10$, 15$} 硬币的顺序无关紧要。
解决方案说:方式总数 = 使用硬币 + 不使用硬币: total_ways = count( S, m - 1, n ) + count( S, m, n-S[m-1] )
以树的形式:
【问题讨论】:
标签: recursion tree dynamic-programming coin-change
例子:
给定 20 美元,我想数一下用硬币兑换 20 美元的方法 = { 5$,10$, 15$} 硬币的顺序无关紧要。
解决方案说:方式总数 = 使用硬币 + 不使用硬币: total_ways = count( S, m - 1, n ) + count( S, m, n-S[m-1] )
以树的形式:
【问题讨论】:
标签: recursion tree dynamic-programming coin-change
解决方案说:方式总数 = 使用硬币 + 不使用硬币 : total_ways = count( S, m - 1, n ) + count( S, m, n-S[m-1] )
我认为你误解了解决方案的陈述。
它的确切含义是:
1) Optimal Substructure
To count total number solutions, we can divide all set solutions in two sets.
1) Solutions that do not contain mth coin (or Sm).
2) Solutions that contain at least one Sm.
这是一种将问题细分为同一问题的两个较小版本的方法。
在不使用硬币的情况下可以完成的方法的数量,相同的问题,相同的目标总数和较小的硬币集合。
但是可以用至少一枚硬币完成的方法的数量是相同的问题,目标总数减少硬币的大小,但允许的相同集合硬币。
在这第二组中,确实允许再次使用相同的硬币。
【讨论】: