import numpy as np
import math
inf = math.inf
def run(sets, num):
dp = [-inf]*(num+1)
dp[0] = 0
count = list(range(np.size(dp)))
del(count[0])
jz = np.zeros((num+1, np.size(sets)))
for i in count:
dp_f = []
k_f = []
for k in sets:
if i >= k:
if dp[i-k] != -inf:
dp_f.append(dp[i-k])
k_f.append(sets.index(k))
dic_k = dict(zip(dp_f, k_f))
if np.size(dp_f) > 0:
dp[i] = min(dp_f)+1
mm = dic_k[min(dp_f)]
kk = [0]*np.size(sets)
kk[mm] = 1
jz[i][:] = jz[i-sets[mm]][:]+kk
# print("指定第", i, "行", "在", i-sets[mm], "行上", mm, "位置", jz[i-sets[mm]][:], "加上1")
else:
dp[i] = -inf
jz[i][:] = [inf]*np.size(sets)
# print(dp)
# print(jz)
return jz
if __name__ == "__main__":
SETS = [5, 1, 2, 10, 20]
NUM = 2325
jz = run(SETS, NUM)
print("------------最终结果-------------", jz[NUM])
找零钱问题动态规划
最新推荐文章于 2024-10-30 00:36:18 发布
513

被折叠的 条评论
为什么被折叠?



