dp动态规划 0-1背包
0-1 knapsack Problem问题背景超市赢家商品价格体积 啤酒2410 汽水23 饼干94 面包105 牛奶94超市允许顾客使用一个体积大小为13的背包选择一件或多件商品带走如何带走总价最多的商品inputn个商品组成的集合O每个商品有两个属性Vi体积Pi价格output求解一个商品子集S0- max蛮力枚举枚举共2n−12^n-12n−1种KnapsackSR(h,i,c)在第个到第个商品中容量为时最优解选择啤酒Knapsack(1,4,3)24不选择啤酒Knapsack(1,4,13)KnapsackSR(1,5,13)max{KnapsackSR(1,4,3)24,KnapsackSR(1,4,13)}—KnapsackSR(h,i,c)max{KnapsackSR(h,i-1,c-vi)pi,KnapsackSR(h,i,c)}//全局变量#defineINF1000000intp[MAXN],v[MAXN],;intmax(inta,intb){if(ab){returna;}elsereturnb;}intKnapsackSR(inth,inti,intc){if(c0){return-INF;}elseif(ih-1){return0;}intp,p1,p2;p1KnapsackSR(h,i-1,c-v[i])p[i];p2KnapsackSR(h,i-1,c);pmax(p1,p2);returnp;}选–KnapsackSR(h,i-1,c-vi)pi不选–pi,KnapsackSR(h,i,c)–精简掉hKnapsackSR(, )前个商品中容量为时最优解intmax(inta,intb){if(ab){returna;}elsereturnb;}intKnapsackSR(inti,intc){if(c0){return-INF;}elseif(i0){return0;}intp,p1,p2;p1KnapsackSR(i-1,c-v[i])p[i];p2KnapsackSR(i-1,c);pmax(p1,p2);//最优子问题returnp;}递归树时间复杂度O(2n)O(2^n)O(2n)重复的求解了大量子问题中间的(n-3,c-2v)这种是重复问题—做一个备忘录存住子问题如果有直接用没有再算他的值带备忘录的递归记录子问题的解避免重复计算KnapsackMR(i,c)intput:商品集合{1,…,i},背包容量coutput最大总价格P[ i , c ]//全局变量intP[MAX_N][MAX_C];//备忘录intv[MAX_N],p[MAX_N];//体积和价格intKnapsackMR(inti,intc){if(c0){return-INF;}elseif(i0){return0;}if(P[i][c]!NULL){//检查是否记录记录了就直接用returnP[i][c];}intp1,p2;p1KnapsackMR(i-1,c-v[i])p[i];//选第i个p2KnapsackMR(i-1,c);//不选第i个P[i][c]max(p1,p2);returnP[i][c];}p[i][c]p[i][c]p[i][c]表示在前i个商品中选择背包容量为c时的最优解自顶向下自底向上能否不递归直接求解p[i][c]p[i][c]p[i][c]?P[ i , c ]只有两种来源P[i-1,c]未选中P[i-1,c-vi]pi选中从左往右从上往下一行一行往下扫先要初始化给好p[0,c]p[i,0]都赋值为0给好初值实例找到了最优解那么如何确定选取了哪些商品呢递推求解最优解追踪递推公式[ , ] {[ − , − ] ,[ − , ]}记录决策过程rec [ i , c ] 1 选择商品 P[i,c] P[i-1,c-vi]pi 就要往回找去到P[i-1,c-vi] 0 不选商品 (P[i,c]P[i-1,c])就往上找去P[i-1,c]KnapsackDP(n,p,v,C)input:商品数量n,各商品的价值p各商品的体积u背包容量Coutput:商品价格的最大值最优解万案intKnapsackDP(intn,intC){for(inti0;iC;i){P[0][i]0;}for(inti0;in;i){P[i][0]0;}//初始化for(inti1;in;i){for(intc1;cC;c){if(v[i]c(p[i]P[i-1][c-v[i]]P[i-1][c]){//能选没超且应该选的确价格更高P[i][c]P[i-1][c-v[i]]p[i];rec[i][c]1;}else{//不选P[i][c]P[i-1][c];rec[i][c]0;}}}//输出最优方案intkC;for(intin;i1;i--){//倒着找if(rec[i][k]1){printf(选择物品 %d\n,i);kk-v[i];}else{printf(不选%d\n,i);}}returnP[n][C];}O(n * c)问题结构分析-递推关系建立-自底向上计算-最优方案追踪问题结构分析给出问题表示[, ]前个商品可选、背包容量为时的最大总价格递推关系建立分析最优子结构问题的最优解由相关子问题最优解组合而成子问题可以独立求解构造递推公式 , {[ −, ], [ − , − ]}自底向上计算确定计算顺序[, ]依赖于子问题[ − , −]和[ − , ]依次求解从左往右从上往下最优方案追踪记录决策过程rec [ i , c ]输出最优方案倒序判断是否选择商品 1 选择商品 P[i,c] P[i-1,c-vi]pi 就要往回找去到P[i-1,c-vi] 0 不选商品 (P[i,c]P[i-1,c])就往上找去P[i-1,c]如果要记录有几种方案

相关新闻

macOS iSCSI启动器终极指南:企业级存储连接完整实战

macOS iSCSI启动器终极指南:企业级存储连接完整实战

macOS iSCSI启动器终极指南:企业级存储连接完整实战 【免费下载链接】iSCSIInitiator iSCSI Initiator for macOS 项目地址: https://gitcode.com/gh_mirrors/is/iSCSIInitiator macOS iSCSI启动器是一个专业的开源软件启动器项目,它允许macOS系统…

2026/6/28 6:33:27阅读更多 →
2026年《冰雪传奇点卡版》官网最新正版下载 纯点卡公平打宝完整指南

2026年《冰雪传奇点卡版》官网最新正版下载 纯点卡公平打宝完整指南

冰雪传奇点卡版作为复古传奇品类中主打公平竞技的代表作品,以纯时长计费模式和完整的冰雪大陆打宝体系,成为众多传奇老玩家的首选版本。想要体验原汁原味的点卡制传奇玩法,选择正版下载渠道是保障账号安全与游戏体验的基础。目前冰雪传奇点卡…

2026/6/28 6:33:27阅读更多 →
终极揭秘:为什么说FLUX.1-schnell正在重新定义AI图像生成游戏规则

终极揭秘:为什么说FLUX.1-schnell正在重新定义AI图像生成游戏规则

终极揭秘:为什么说FLUX.1-schnell正在重新定义AI图像生成游戏规则 【免费下载链接】FLUX.1-schnell 项目地址: https://ai.gitcode.com/hf_mirrors/black-forest-labs/FLUX.1-schnell 还在为AI图像生成的速度和成本发愁吗?今天咱们一起看看Black…

2026/6/28 6:33:27阅读更多 →
终极指南:3分钟快速上手通达信ChanlunX缠论插件,实现股票走势智能识别

终极指南:3分钟快速上手通达信ChanlunX缠论插件,实现股票走势智能识别

终极指南:3分钟快速上手通达信ChanlunX缠论插件,实现股票走势智能识别 【免费下载链接】ChanlunX 缠中说禅炒股缠论可视化插件 项目地址: https://gitcode.com/gh_mirrors/ch/ChanlunX 还在为手动画缠论笔段而烦恼吗?ChanlunX缠论插件…

2026/6/28 8:13:34阅读更多 →
[智能体-558]:主流 AI 智能体(Agent)纵向分层技术栈(自底向上 8 层完整体系)

[智能体-558]:主流 AI 智能体(Agent)纵向分层技术栈(自底向上 8 层完整体系)

主流 AI 智能体(Agent)纵向分层技术栈(自底向上 8 层完整体系) 整体分层逻辑:硬件算力底座 → 模型运行层 → 记忆 / 数据底座 → Agent 通信协议层 → 智能体编排框架层 → 低代码 / LLMOps 平台层 → 能力插件 / 工…

2026/6/28 8:13:34阅读更多 →
__attribute__((packed))作用

__attribute__((packed))作用

因为对于定义的变量,编译器为了让CPU快速访问,会在成员之间自动插入填充字节 比如:可以看到该结构体中有的元素是32位的,有的不是; 编译器为了让cpu可以快速访问,对该结构体进行了优化:所以这样…

2026/6/28 8:13:34阅读更多 →
软件设计师报名全流程避坑手册:从学信网验证到单位盖章,12个关键节点+8个高频驳回原因

软件设计师报名全流程避坑手册:从学信网验证到单位盖章,12个关键节点+8个高频驳回原因

更多请点击: https://kaifayun.com 第一章:软件设计师报名资格的底层逻辑与政策依据 软件设计师考试作为全国计算机技术与软件专业技术资格(水平)考试(简称“软考”)的重要组成部分,其报名资格…

2026/6/28 8:13:34阅读更多 →
三星电视游戏串流革命:Moonlight for Tizen 技术解析与应用指南

三星电视游戏串流革命:Moonlight for Tizen 技术解析与应用指南

三星电视游戏串流革命:Moonlight for Tizen 技术解析与应用指南 【免费下载链接】moonlight-chrome-tizen A WASM port of Moonlight for Samsung Smart TVs running Tizen OS (5.5 and up) 项目地址: https://gitcode.com/gh_mirrors/mo/moonlight-chrome-tizen …

2026/6/28 8:13:34阅读更多 →
告别手工缠论分析:5分钟掌握ChanlunX通达信自动化缠论插件

告别手工缠论分析:5分钟掌握ChanlunX通达信自动化缠论插件

告别手工缠论分析:5分钟掌握ChanlunX通达信自动化缠论插件 【免费下载链接】ChanlunX 缠中说禅炒股缠论可视化插件 项目地址: https://gitcode.com/gh_mirrors/ch/ChanlunX 还在为缠论的手工分析感到困惑吗?面对复杂的K线图,手动绘制笔…

2026/6/28 8:08:34阅读更多 →
AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

6个月前的2025年12月,Boris Cherny 公开宣布自己卸载了 IDE。一时间,Vibe Coding 成了全行业最热的话题。6个月后,当我们回过头来拉一份真实账本,发现事情远没有"一句话生成一个App"那么浪漫。本文从产品经理和研发两个…

2026/6/28 0:08:01阅读更多 →
审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

引言:审计结束三个月了,审计员的权限还没关某城商行每年按照监管要求开展至少一次数据安全审计。审计期间,内审部门需要抽样检查各类业务数据——交易流水、客户信息、员工操作日志、权限配置记录。这些数据分布在不同系统中,审计…

2026/6/28 0:08:01阅读更多 →
AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

6个月前的2025年12月,Boris Cherny 公开宣布自己卸载了 IDE。一时间,Vibe Coding 成了全行业最热的话题。6个月后,当我们回过头来拉一份真实账本,发现事情远没有"一句话生成一个App"那么浪漫。本文从产品经理和研发两个…

2026/6/28 0:08:01阅读更多 →
审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

引言:审计结束三个月了,审计员的权限还没关某城商行每年按照监管要求开展至少一次数据安全审计。审计期间,内审部门需要抽样检查各类业务数据——交易流水、客户信息、员工操作日志、权限配置记录。这些数据分布在不同系统中,审计…

2026/6/28 0:08:01阅读更多 →