题解 | [NOIP2001]装箱问题 Python3

[NOIP2001]装箱问题

https://www.nowcoder.com/practice/55100a6608ad4656849dbd1f16d044cb

import sys


# 0-1 背包问题,动态规划解决
# 总共n个物品,V的容量
# 对于每个物品,在考虑最大容量的结果的时候,只有它被装进去,或者没有被装进去这两种情况
# 首先明确一点,对于n个物品V的容量的最后的解决方案,是可以由n2个物品V2的容量推导而来,n2<n, V2<V
# dp[i][j] 表示当考虑第i个物品的时候,最大容量为j的时候最大的体积
# dp[i][j] = max(dp[i-1][j-v]+v, dp[i-1][j]) # dp[i-1[j-v]表示把物品i放进背包的情况

V = int(input())
n = int(input())

weights = []
for _ in range(n):
    weights.append(int(input()))

dp = [[0]*(V+1) for _ in range(n+1)]
# 因为考虑到i-1, 所以范围从0~n+1

for i in range(1,n+1):
    for j in range(1,V+1):
        if j < weights[i-1]:
            dp[i][j] = dp[i-1][j]
        else:
            dp[i][j] = max(dp[i-1][j-weights[i-1]]+weights[i-1], dp[i-1][j])

print(V-dp[-1][-1])




全部评论

相关推荐

面试官问:为什么不考研?该怎么回答啊😭我说现在的就业环境差到底了,还有就是我不想学数学,感觉面试官笑容都凝固了😢
DayDayNoBug的鲜芋球:我说的是“上学期其实尝试过去探索一些研究的方向,但感觉那些对我来说都没有很大的吸引力,相比起研究我可能更喜欢开发这种实践性的东西,它会让我觉得很有意思并且会为之深入进去”(虽然也不知这个回答怎么样哈哈哈哈哈哈)
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务