学习Python从娃娃抓起!用python来完成信息学奥赛一本通网站的题目,记录每一个瞬间。
附上汇总贴:信息学奥赛一本通python版 | 汇总_热爱编程的通信人的博客-CSDN博客
【题目描述】
经典0-1背包问题,有n个物品,编号为i的物品的重量为w[i],价值为c[i],现在要从这些物品中选一些物品装到一个容量为m的背包中,使得背包内物体在总重量不超过m的前提下价值尽量大。
【输入】
第1行:两个整数,n(物品数量,n≤3500)和m(背包容量,m≤12880)。
第2...n+1行:每行二个整数w[i],c[i],表示每个物品的重量和价值。
【输出】
仅一行,一个数,表示最大总价值。
【输入样例】
4 6
1 4
2 6
3 12
2 7
【输出样例】
23
【代码详解】
n,m = [int(i) for i in input().split()]
Wi = [0]
Ci = [0]
dp = [0 for i in range(m+1)]
for i in range(1, n+1):
ls = [int(i) for i in input().split()]
Wi.append(ls[0])
Ci.append(ls[1])
for i in range(1, n+1):
for j in range(m, Wi[i]-1, -1):
dp[j] = max(dp[j], dp[j - Wi[i]] + Ci[i])
print(dp[m])
【运行结果】
4 6
1 4
2 6
3 12
2 7
23