コインの変更問題の解決策を理解しようとしていますが、いくつかの問題があります。
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)
これは、2 次元配列を使用して同じ答えを何度も再計算することを避ける標準的なアルゴリズムです。
私の問題は 2 つあります。
- 基本ケースを定義し、
table[][]
初期値として組み込む方法 - テーブルからさまざまなシーケンスを抽出する方法
問題 1 に関しては、このアルゴリズムには 3 つの基本ケースがあります。
if n==0, return 1
if n < 0, return 0
if n >= 1 && m <= 0, return 0
それらを に組み込む方法がtable[][]
わかりません。最後に、配列からソリューション セットを抽出する方法がわかりません。