动态规划——01背包问题、完全背包(python、一维DP)

01-背包问题:从最大容量开始,从后往前遍历背包容量

每种物品只能选择一次。物品种类为n,背包容量为k。从最大容量开始,从后往前遍历背包容量,小于当前物品容量的背包大小不遍历,即遍历到w[i]即可。

(1)容量不超过k时,最大价值为多少

dp数组初始化:dp=[0]*(k+1) ,全部初始化为0,表示都可达

复制代码
dp=[0]*(k+1)
for i in range():
    for j in range(k,w[i]-1,-1):
        dp[j]=max(dp[j],dp[j-w[i]]+val[i])
return dp[k]

(2)容量恰好为k时,最大价值为多少,如果不能恰好为k,则表示不可达,不可行

dp初始化:dp=[float('-inf')],初始化为负无穷大,表示为不可达

dp[0]=0 容量为0时,一定可达

复制代码
dp=[float('-inf')]*(k+1)
for i in range():
    for j in range(k,w[i]-1,-1):
        dp[j]=max(dp[j],dp[j-w[i]]+val[i])
if dp[k]==float('-inf'):
    print(0)
    return 0
else:
    print(dp[k])
    return dp[k]

完全背包问题:从前往后遍历背包容量

每种物品可以选择无限多次。物品种类为n种。

复制代码
dp=[0]*(k+1)
for i in range(n):
    for j in range(w[i],k+1):
        dp[j]=max(dp[j],dp[j-w[i]]+val[i])
return dp[k]
相关推荐
workflower1 天前
具身智能行业应用-生活服务业
大数据·人工智能·机器人·动态规划·生活
嘻嘻哈哈樱桃1 天前
牛客经典101题题解集--动态规划
java·数据结构·python·算法·职场和发展·动态规划
电科一班林耿超1 天前
第 16 课:动态规划专题(二)—— 子序列与子数组问题:面试最高频的 DP 题型
数据结构·算法·动态规划
fengfuyao9851 天前
MATLAB实现自适应动态规划(ADP)方法
matlab·动态规划·代理模式
cheems95272 天前
[算法手记] 动态规划 ,二维费用限制背包问题如何处理
算法·动态规划
样例过了就是过了2 天前
LeetCode热题100 单词拆分
c++·算法·leetcode·动态规划·哈希算法
沙白猿2 天前
代码随想录 28(动态规划)
算法·动态规划
样例过了就是过了2 天前
LeetCode热题100 乘积最大子数组
c++·算法·leetcode·动态规划
谭欣辰3 天前
详细讲解 C++ 状压 DP
开发语言·c++·动态规划
khalil10203 天前
代码随想录算法训练营Day-36动态规划04 | 1049. 最后一块石头的重量 II、494. 目标和、474.一和零
算法·动态规划