すでに指摘したように、この問題には動的計画法が最適です。私はこれのために Python プログラムを書きました:-
def sumtototal(total, coins_list):
s = [0]
for i in range(1, total+1):
s.append(-1)
for coin_val in coins_list:
if i-coin_val >=0 and s[i-coin_val] != -1 and (s[i] > s[i-coin_val] or s[i] == -1):
s[i] = 1 + s[i-coin_val]
print s
return s[total]
total = input()
coins_list = map(int, raw_input().split(' '))
print sumtototal(total, coins_list)
入力用:
12
2 3 5
出力は次のようになります。
[0, -1, 1, 1, 2, 1, 2, 2, 2, 3, 2, 3, 3]
3
list_index は必要な合計であり、list_index の値は no です。その合計を得るために必要なコインの。上記の入力 (値 12 を取得) の答えは 3 (値 5、5、2 のコイン) です。