DP 背包的核心

本文详细介绍了背包问题的三种类型:01背包、完全背包和多重背包,并提供了核心的动态规划解决方案。同时,文章还探讨了背包问题的衍生问题,如装满问题,并通过实例解析了Partition Equal Subset Sum和Coin Change等经典习题。
摘要由CSDN通过智能技术生成

背包问题 (knapsack)是一种组合优化的NPC问题(Nondeterministic Problem Complete- 千禧难题之一)

NP问题:非确定多项式,但能在多项式时间内找到解

什么时候用背包: 

什么时候用滚动数组: 

 dp[0][0 .... w] = 0, 表示0件物品装入背包最大价值为0

01 背包 01 knapsack

N件物品,第i件重量为w[i],价值为v[i]。在总重量不超过W,求最大价值。

        dp[i][j] = max(dp[i-1][j] (不选第i个背包), dp[i-1][j-w[i]] + v[i] (选第i个背包))

dp[0,...,W] = 0
for i = 1,...,N:
    //必须逆向枚举,因为不能重叠
    for j = W,...,w[i]:
        dp[j] = max(dp[j], dp[j−w[i]]+v[i])

完全背包 unbounded knapsack: 

N件物品,第i件重量为w[i],价值为v[i]。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值