【算法】:动态规划--背包问题

背包问题

引言

什么是背包问题?

背包问题就是一个有限的背包,给出一定的物品,如何合理的装入物品使得背包中的物品的价值最大?

01背包

01背包,顾名思义就是每一种给定的物品要么选择,要么不选,求出最终最大的价值。

针对01背包又有两种情况,一种情况是要求最终装满背包,第二种是不用一定装满背包。

下面给出一道例题,并且给出01背包的dp解法。

  1. leetcode LCR 101 : 分割等和子集

    解题思路:
    明显,我们可以理解为这里有一个Sum{ai} / 2的背包,我们需要将他装满,这道题比较简单,没有value值。
    状态转移方程:(01背包常见的状态转移方程)
  • dpij : 前i个元素能够填充大小为j的背包的最大价值
  • dpij = max { dpi - 1j , dpi -1j - Size\[i] + valuei }

第i个位置,可以不选择它装入背包, 这个时候为dpi - 1j , 也可以选择,这个时候为dpi -1j - Size\[i] + valuei

复制代码
细节: 
1. 判断j >= Size[i] 
2. 初始化size的时候 + 1,可以更好处理边界条件

总结:其实无论是否一定需要装满,状态转换方程都差不多,最大的差别是初始化dp的时候存在较大的差异,希望读者注意。

完全背包

完全背包,和01背包的差异就是每一种物品可以选取多次,其他一样,也是可以分为装满和不需要一定装满两种情况。

不太会Latex, 只有手绘。

例题:leetcode LRC 103 零钱兑换

解法:

总结

这里列举了常见的基础背包问题的解法,再往后学习就是竞赛难度的背包问题,这里我们不再继续赘述,读者想要了解更加复杂的背包问题,可以自行继续探索。

相关推荐
玉树临风ives1 小时前
atcoder ABC 472 题解
数据结构·c++·算法
AI服务老曹1 小时前
抽烟识别算法接入 AI 视频分析平台的流程与误报优化指南
人工智能·算法·音视频
阳明山水1 小时前
销量预测2025—2026:技术演进、实证发现与系统架构的系统性综述
人工智能·深度学习·算法·机器学习·架构
伯远医学1 小时前
RIP-seq 高分文献案例分享
java·前端·javascript·人工智能·算法·eclipse·html
啊嘞嘞?2 小时前
力扣(LRU缓存)
算法·leetcode
珂朵莉MM2 小时前
2026国信杯具身智能创新大赛-编程技能赛--本科组国赛解题报告 | 珂学家
算法·深度优先·图论
啊嘞嘞?2 小时前
力扣(下一个排列)
算法·leetcode
疯狂打码的少年2 小时前
【数据结构】复习日:树 + 图 + 排序(整理对比表)
数据结构·笔记·算法
benchmark_cc2 小时前
Claude Code + MCP + QuantDash:打造全自动量化研究流水线的终极指南
人工智能·后端·爬虫·算法·claude·mcp·quantdash
星星.7223 小时前
2026河南萌新联赛第六场(郑州大学)补题B、D、L、J、I
数据结构·c++·算法