题目
多重背包问题
思路
在0,1背包问题的基础上,加一个for循环,控制拿k次。
代码
def morebag(coins,m,s):
lenc = len(coins)
dp = [[0 for _ in range(lenc+1)]for _ in range(m+1)]
for i in range(1,m+1):
dp[i][0] = float('inf')
for i in range(1,lenc+1):
for j in range(1,m+1):
for k in range(1,s+1):
if k*coins[i-1] <= j:
dp[j][i] = min(dp[j][i-1], dp[j-k*coins[i-1]][i-1]+k)
else:
dp[j][i] = dp[j][i-1]
return dp[-1][-1]