动态规划——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]
相关推荐
闻缺陷则喜何志丹19 小时前
【动态规划】P3609 [USACO17JAN] Hoof, Paper, Scissor G
c++·算法·动态规划·洛谷
rannn_11121 小时前
【力扣hot100】动态规划专题|70、118、198、279、322、139、300、152、416、32
算法·leetcode·动态规划
a187927218311 天前
【算法】动态规划入门:从打家劫舍到状态设计的三堂课
算法·leetcode·动态规划·dp·回溯·暴力
lvwangshu1 天前
P7668 [JOI 2018 Final] 团子制作 / Dango Maker 题解
动态规划·题解·贪心·性质题·思维好题
奶人五毛拉人一块2 天前
动态规划--子数组类型
算法·动态规划·子数组问题
lvwangshu3 天前
P6534 [COCI 2015/2016 #1] UZASTOPNI 等差树列 题解
动态规划·图论·题解·性质题
小玮看世界4 天前
[Python]动态规划三步走:从爬楼梯到打家劫舍,再到最大子数组和
开发语言·python·动态规划
2601_956121977 天前
线性DP(入门)
c++·算法·动态规划
lvts_cs8 天前
如何评估化工产业规划的质量
大数据·人工智能·动态规划
lvts_cs9 天前
化工产业规划对城市发展的具体指导作用
算法·动态规划