信息学奥赛一本通python版 | Charm Bracelet

学习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

猜你喜欢

转载自blog.csdn.net/guolianggsta/article/details/130902860
今日推荐