题目描述
现在有一个背包(容器),它的体积(容量)为M,现在有N种物品(每个物品只有一个),每个物品的价值V[i]和占用空间W[i]都会由输入给出,现在问这个背包最多能携带总价值多少的物品?
设有N种物品,每种物品有一个重量及一个价值。同时有一个背包,最大载重量为M,今从n种物品中选取若干件,使其重量的和小于等于M,而价值的和为最大。N<=100,M<1000.
输入
第一行两个数:物品总数N,背包载重量M;两个数用空格分隔;
第二行N个数,为N种物品重量Wi(<1000);两个数用空格分隔;
第三行N个数,为N种物品价值Vi(<1000); 两个数用空格分隔;
输出
一个整数,表示总价值;
样例输入
4 10
4 3 5 7
15 7 20 25
样例输出
35
python解答
N, M = map(int, input().split())
weights = list(map(int, input().split()))
values = list(map(int, input().split()))
# 初始化dp数组
dp = [[0] * (M + 1) for _ in range(N + 1)]
# 计算dp数组的值
for i in range(1, N + 1):
for j in range(1, M + 1):
if weights[i-1] > j:
dp[i][j] = dp[i-1][j]
else:
dp[i][j] = max(dp[i-1][j], dp[i-1][j-weights[i-1]] + values[i-1])
print(dp[N][M])