python - 动态规划的硬币找零问题
问题描述
这是我关于硬币更换问题的代码,用于打印一组硬币的方式总数和目标数量
def coin_change(coins,amount):
table=[0 for k in range(amount+1)]
table[0]=1
for coin in coins:
for x in range(coin,amount+1):
table[x] = table[x]+ table[x-coin]
print(table)
return table[amount]
我想知道是否有任何方法可以使用相同的动态编程解决方案打印这些方式(借助内部构造的表或任何其他方法)
例如,如果一组硬币是 [1,3,5] 并且目标数量是 6,那么总共有 4 种可能的方式。[[1,1,1,1,1,1,],[1,1,1,3],[3,3],[1,5]] 我想要这种方式的列表作为输出。
解决方案
根据您的要求编辑的答案:
def combine(parent, me):
if len(parent) == 0:
return [[me]]
new_list = []
for entry in parent:
new_list.append(entry + [me])
return new_list
def get_ways(amount, coins):
table = [0 for k in range(amount + 1)]
table[0] = 1
ways = [[] for _ in range(amount + 1)]
for coin in coins:
for x in range(coin, amount + 1):
table[x] = table[x] + table[x - coin]
ways[x].extend(combine(ways[x - coin], coin))
print(ways[amount])
return table[amount]
print(get_ways(6, [1, 3, 5]))
输出:
[[1, 1, 1, 1, 1, 1], [1, 1, 1, 3], [3, 3], [1, 5]]
4
推荐阅读
- javascript - 关于 JavaScript 承诺和“then”语句的新手问题
- postgresql - 将qgis上不同多边形层上的每个点元素分开
- graphql - 如何塑造我的 graphql 后端响应?
- python - Tensorflow 只能看到 XLA_GPUs 而不能使用它们
- firebase - Firebase + Flutter:获取用于登录的平台用户
- sql - sql中的自定义排序
- java - 如何解析 XML 标签外的文本?
- c++ - 将头文件包含到命名空间时,为什么 Intellisense 无法从头文件中找到变量?
- jquery - 如何显示特定于下拉选择的隐藏 div?
- excel - 如果列包含日期,则 IF 语句计算日期之间的天数