01背包问题
题目描述
一个旅行者有一个最多能装M公斤的背包,现在有n件物品,它们的重量分别是W1,W2,...,Wn,它们的价值分别是C1,C2,...,Cn,求旅行者能获得最大总价值。
输入描述
第一行:两个整数,M(背包容量,M≤200)和N(物品数量,N≤30);
第2...N+1行:每行二个整数Wi,Ci,表示每个物品的重量和价值
输出描述
仅一行,一个数,表示最大总价值。
样例输入
10 4
2 1
3 3
4 5
7 9
样例输出
12
代码详解
展开查看
M, N = [int(i) for i in input().split()] Wi = [0] Ci = [0] for i in range(1, N+1): ls = [int(i) for i in input().split()] Wi.append(ls[0]) Ci.append(ls[1]) dp = [[0 for j in range(M+1)] for i in range(N+1)] for i in range(1, N+1): for j in range(1, M+1): if j < Wi[i]: dp[i][j] = dp[i-1][j] else: dp[i][j] = max(dp[i-1][j], dp[i-1][j-Wi[i]] + Ci[i]) # for i in range(N+1): # for j in range(M+1): # print(dp[i][j]) print(dp[N][M])
运行结果
展开查看
10 4 2 1 3 3 4 5 7 9 12