使用动态规划来解决此问题。将其转换为01背包问题,并设置物品的数量限制,即可实现只取特定数量的背包问题。
以下是Python代码示例:
def knapsack(amounts, weights, values, capacity): n = len(weights) dp = [[0]*(capacity+1) for _ in range(len(amounts)+1)] for i in range(1, n+1): for j in range(amounts[i-1]): for k in range(capacity, weights[i-1]-1, -1): dp[j+1][k] = max(dp[j+1][k], dp[j][k-weights[i-1]]+values[i-1]) return dp[amounts[-1]][capacity]