动态规划——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]
相关推荐
hai3152475431 小时前
九章编程法 · 字典引擎【0/1拓扑步进 · 矩阵压缩·终极封版】
人工智能·数学建模·性能优化·动态规划·代码复审·傅立叶分析·极限编程
-森屿安年-1 小时前
62. 不同路径
算法·动态规划
-森屿安年-18 小时前
91. 解码方法
c++·动态规划
wabs66619 小时前
关于动态规划【力扣96.不同的二叉搜索树的递推公式怎么理解?】
算法·动态规划
珊瑚里的鱼21 小时前
【动态规划】买卖股票的最佳时机Ⅲ
算法·动态规划
渡之1 天前
GeoBridge 深度解析:语义锚定多视图基础模型,重塑无人机跨视角地理定位
深度学习·算法·动态规划·无人机
xhtdj1 天前
技术采用曲线回望二十年
运维·数据库·人工智能·clickhouse·动态规划
8Qi81 天前
回文子串(Palindromic Substrings)—— 题解
算法·leetcode·职场和发展·动态规划
wabs6662 天前
关于动态规划【力扣343.整数拆分的递推公式怎么理解?】
算法·leetcode·动态规划
珊瑚里的鱼2 天前
【动态规划】买卖股票的最佳时机含手续费
算法·动态规划