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

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

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

(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'),初始化为负无穷大,表示为不可达

dp0=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]
相关推荐
y1su4 小时前
Leetcode 字符串模板
java·数据结构·算法·leetcode·职场和发展·动态规划
lvwangshu6 小时前
P8981 「DROI」Round 1 距离 题解
动态规划·图论·题解·dp·树形dp·技巧·换根dp·性质题·思维好题
Tairitsu_H7 小时前
[动态规划#1] 子数组 | 最大子数组和 | 环形子数组的最大和 | 乘积最大子数组 | 乘积为正数的最长子数组
算法·动态规划
罗湖老棍子14 小时前
【例 2】牧场的安排(信息学奥赛一本通- P1593)三角形牧场(洛谷-P1284)
算法·动态规划·状压dp·状态压缩动态规划
Cccp.12315 小时前
【leetcode】(十四)从暴力递归到动态规划
数据结构·算法·leetcode·动态规划
?abc!2 天前
(动态规划+DFS)494. 目标和
算法·深度优先·动态规划
大陈子编程2 天前
C++ 背包九讲:从入门到精通的动态规划专题
开发语言·c++·动态规划
lvwangshu2 天前
CF1882D Tree XOR 题解
动态规划·题解·贪心·dp·树形dp·换根dp·性质题·思维好题·推导题
Interview Aid1122 天前
Snowflake OA 面试真题:前缀和、BFS 与动态规划
面试·动态规划·宽度优先
wzdark6 天前
动态规划算法的状态转移矩阵可视化分析5
算法·矩阵·动态规划