动态规划——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]
相关推荐
CQU_JIAKE1 天前
9.15【A】
算法·动态规划
yi0112 天前
DAY17: LeetCode 139|单词拆分:从“把单词删掉”到用 DP 记录合法切口
人工智能·笔记·python·算法·leetcode·动态规划
老歌老听老掉牙2 天前
动态规划:从递归到最优决策的算法艺术
算法·动态规划
richard_yuu4 天前
动态规划:强化学习的「数学基础」,从 MDP 到值迭代
深度学习·神经网络·算法·yolo·机器学习·动态规划
lvwangshu5 天前
P12960 毒药 题解
动态规划·题解·贪心·技巧·性质题·思维好题
彧azz12 天前
算法设计与分析:贪心与动态规划
数据结构·学习·算法·贪心算法·动态规划
Logic10113 天前
C语言/数据结构动态规划题解:Kadane算法求最大子数组和——O(n)时间O(1)空间
c语言·数据结构·动态规划·贪心·时间复杂度·算法题·最大子数组和
梦帮科技14 天前
AI 音乐产品的发布工程:验证门、数据发布、回滚与生产运维纪律
数据结构·数据库·架构·node.js·音视频·动态规划·推荐算法
语戚14 天前
力扣 1621. 大小为K的不重叠线段的数目:动态规划(Java 实现)
java·算法·leetcode·动态规划·力扣·dp
青山木14 天前
Hot 100 --- 最长有效括号
java·数据结构·算法·leetcode·动态规划