我正在尝试了解硬币找零问题的解决方案,但遇到了一些困难。
在Algorithmist中,有一个动态规划解决方案的伪代码解决方案,如下所示:
n = goal number
S = [S1, S2, S3 ... Sm]
function sequence(n, m)
//initialize base cases
for i = 0 to n
for j = 0 to m
table[i][j] = table[i-S[j]][j] + table[i][j-1]
这是一个非常标准的O(n^2)
算法,可以避免使用二维数组多次重新计算相同的答案。
我的问题有两个:
- 如何定义基本案例并将它们合并
table[][]
为初始值 - 如何从表中提取不同的序列
关于问题 1,此算法存在三种基本情况:
if n==0, return 1
if n < 0, return 0
if n >= 1 && m <= 0, return 0
如何将它们合并到table[][]
中,我不确定。最后,我不知道如何从数组中提取解决方案集。