したがって、これはコインに関する 2 つの部分の問題です。最初の部分では、1 ~ 99 セントのコイン カウントを合計します (たとえば、1 セントになるには 1 コイン、2 セントになるには 2 コイン、など)。各値)。これは、次のコードで表すことができます (提案/改善を自由に行ってください)。
def findbest(origarray, denom):
current = origarray
i = 1
while(i < size):
if(i in denom):
current[i] = 1
coinlist[i] = [i]
else:
k = 1
while(k < 1 + (i/2)):
c = current[k] + current[i-k]
if(c < current[i]):
current[i] = c
coinlist[i] = coinlist[k] + coinlist[i-k]
k+=1
print i, current[i], coinlist[i]
i+=1
return current
size = 100
coinlist = [[]]
origarray = [0]
i = 1
while(i < size):
origarray.append(100)
coinlist.append([])
i += 1
denom = [1,5,10,25,50]
x = findbest(origarray, denom)
total=0
for value in findbest(origarray,denom):
total += value
print total
print "\n\n\n"
print x
問題の 2 番目の部分は、すべてのコイン数の合計が最小になる理想的な 3 つの金種 (実際の金種である必要はありませんが、1 つが 1 である必要があります) を見つけることです。ここが私にとって難しいところです。最適な 3 つ ([1,12,19] であることはわかっていますが、その点に到達することはできません) が見つかるまで、金種の値をブルート フォースする何かを作成する必要があることはわかっていますが、そうではありません。それを行う方法を確認してください。これを行う方法を知っている人はいますか?