动态规划-背包问题小结
1. 對(duì)于背包問題的動(dòng)態(tài)轉(zhuǎn)移方程:
當(dāng)前容量下裝滿背包有幾種方法: dp[j] += dp[j-nums[i]]
當(dāng)前容量下能否裝滿或者最多能裝多少: dp[j] = max(dp[j], dp[j-nums[i]]+nums[i])
當(dāng)前容量下裝滿的最大價(jià)值:dp[j] = max(dp[j], dp[j-weights[i]]+values[i]
當(dāng)前容量下裝滿所用物品的最小個(gè)數(shù):dp[j] = min(dp[j], dp[j-nums[i]]+1
2. 對(duì)于背包問題的初始化設(shè)置:
如果是裝滿背包有多少種方法: 全局初始化為0, dp[0]=1, 啥也不能裝也算一種方法
如果是否裝滿或者最多能裝多少: 全局初始化為0, dp[0] = 0, 0容量的背包不能裝物品
如果是裝滿的最大價(jià)值: 全局初始化為0, dp[0] = 0, 0容量背包不能裝物品
如果是裝滿所用物品的最小個(gè)數(shù): 全局初始化為float("intf"), dp[0]=0, 0容量沒法裝
3. 對(duì)于背包問題的遍歷順序:
1) 0-1背包問題:
正向遍歷物品, 逆向遍歷背包容量, 且必須先遍歷物品,后遍歷背包容量
2) 完全背包問題: 正向遍歷物品,正向遍歷背包容量
3) 如果不是求裝滿背包有幾種方法的累加題目, 這時(shí)候,先遍歷物品或者先遍歷背包容量都可, 我喜歡前一種
4) 如果是涉及到求裝滿背包有幾種方法的累加題目,分情況:
求組合數(shù), 也就是同一批物品,不管順序關(guān)系: 先遍歷物品,然后遍歷背包容量
求排列數(shù), 也就是同一批物品,管順序關(guān)系: 先遍歷背包容量,后遍歷物品
總結(jié)
以上是生活随笔為你收集整理的动态规划-背包问题小结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 101. Leetcode 139. 单
- 下一篇: 102. Leetcode 198. 打