DP基础——背包问题(上)
讲背包之前,我先说一下DP。
DP即动态规划,它的根本是暴力,但是是有思想的暴力,而实现方式是递推,DP大部分是逆推,作为我的“本命算法”,是非常简单的。
前面说到,DP是有思想的暴力,暴力有手就行,所以DP的重点就在这个思想上,DP的思想可以分为两部分:
第一部分是状态的表示,DP是一定要用一个数组存的,不管是几维DP,都要一个DP数组存下来,数组名索性就叫DP[]吧,DP常用来求最大值或最小值。以背包问题举例,背包问题一般都是两维DP,DP[i][j]表示当前重量为j,取第i个物品时取得的价值。
第二部分就是DP最重要的一点——状态转移,DP必须有一个状态转移方程,也就是当前状态是从哪些状态由哪些方法转移过来的,可以说状态转移方程是DP的灵魂。
背包问题就是DP的一个基础题型,甚至可以说是DP的模板题,它无非就是建模,转移就完事了。
背包问题有01背包、完全背包、多重背包、分组背包、混合背包等等。
关于具体背包问题的思路及代码,第二篇中会有讲解。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话