01背包 这个算法界的守门员
一个写全栈技术、偏底层基建、爱研究 bug 的程序员博客。技术界的一名小工匠⊥⊤每天进步一点点。背包问题可以说是算法经典中的经典动态规划算法中经典中的经典。01背包仅是背包问题的一个个例背包还有完全背包、分组背包等其他都是01背包的一个变体、改造、叠加组合。这里只研究这个经典的01背包。01背包虽用暴力穷举可以实现最大价值的求取但随着数据的增大它直接会卡死机因为穷举的时间复杂度是O(2的n次方)太慢了所以这里采取dp[][]表格的方式来做时间复杂度为O(n*m)要快的多。01背包问题的描述现有1个背包容量(容重量、容体积均可)为V有n件物品(各物品容量、价值分别表示为w、v)每件物品只选或不选。求在背包可容纳的范围内可选到的物品组合的最大价值。附01表示一件物品选或者不选它。动态规划思路动态规划法的一个算法思路它的思路是通过将大问题拆解为小问题通过在小问题上求最优解的方式最终达到在整体大问题上求出最优解。编码实现及细节说明测试用例的数据物品objsweight valuew v2 63 54 7//// Created by Lenovo on 2026/6/20.//#includestdio.h#defineMAX_N100#defineMAX_V100// dp[i][j]前i个物品背包容量j的最大价值intdp[MAX_N][MAX_V];intw[MAX_N],v[MAX_N];// 重量、价值intmain(){intn,V;// 输入物品数、背包容量(容纳重量)scanf(%d%d,n,V);for(inti1;in;i){scanf(%d%d,w[i],v[i]);}// 动态规划for(inti1;in;i){for(intj1;jV;j){if(jw[i]){// 装不下当前物品dp[i][j]dp[i-1][j];}else{// 不选 / 选 取最大值if(dp[i-1][j]dp[i-1][j-w[i]]v[i])dp[i][j]dp[i-1][j];elsedp[i][j]dp[i-1][j-w[i]]v[i];}printf(------\n);}}printf(%d\n,dp[n][V]);return0;}程序运行结果D:\CLionProjects\argorithm\algorithm\01pg2arr.exe310263547------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------18Process finished withexitcode0算法复杂度时间复杂度两层循环外层遍历n件物品内层遍历背包容量V总运算次数n * V时间复杂度O(nV)空间复杂度开辟 n行V列二维数组存储所有子问题结果空间复杂度O(nV)初次接触的坑点1.很多初次接触这个01背包动态规划法的程序员、编程爱好者、学生等会习惯性的代入或使用暴力穷举的思考方式求解(而不自知)这也是本文作者初次接触时的现状(后面才反思到)。心想只要把所有组合例出来再取最大值不就行了吗。暴力穷举在数据量小时勉强可以但数据量超过一定量级效率极慢了100个、1万个、10万个呢它的时间复杂度是O(2的n次方)。举个例子n100V1000DP运算次数100 * 1000 10 万次计算机瞬间跑完暴力 2^{100} 等则是天文数字完全无法计算甚至宕机。动态规划法与暴力穷举法完全不是一个思路所以会觉得懵逼了。2.不理解为什么要用二维DP数组[][]怎么存不用纠结。一维的也可以只不过要加一些辅助存储。二维的也可以二维[][]这种表示形式像表格易于理解。动态规划算法的这个思想是不娈的只要能实现通过子优解得到整体最优解就行。建议自行系统的补习算法思想基础。动动手做做表格逐步填数据推演一遍就明白它的简单巧妙了。状态转换方程这4行下边代码块中ifelse这4行这几行是重点吃透了这个01背包就吃透了便算是学会了。// 动态规划for(inti1;in;i){for(intj1;jV;j){if(jw[i]){// 装不下当前物品dp[i][j]dp[i-1][j];}else{// 不选 / 选 取最大值if(dp[i-1][j]dp[i-1][j-w[i]]v[i])dp[i][j]dp[i-1][j];elsedp[i][j]dp[i-1][j-w[i]]v[i];}printf(------\n);}}重点理解这一句码测千遍其意自现。dp[i][j] dp[i-1][j - w[i]] v[i];下篇见goodbye。

相关新闻

E-Hentai漫画批量下载终极指南:免费一键打包完整教程

E-Hentai漫画批量下载终极指南:免费一键打包完整教程

E-Hentai漫画批量下载终极指南:免费一键打包完整教程 还在为E-Hentai漫画的繁琐下载而烦恼吗?E-Hentai-Downloader是一款强大的浏览器脚本工具,能够智能解析网页内容,实现多线程并行下载,自动将漫画打包为ZIP文件&…

2026/7/4 4:28:21阅读更多 →
E-Hentai漫画下载器完整指南:免费批量下载终极教程

E-Hentai漫画下载器完整指南:免费批量下载终极教程

E-Hentai漫画下载器完整指南:免费批量下载终极教程 你是否经常在E-Hentai上找到心仪的漫画,却为了一页页手动保存而烦恼?E-Hentai下载器正是你需要的解决方案!这款强大的浏览器脚本工具能够智能解析网页内容,实现多线程…

2026/7/4 4:28:21阅读更多 →
E-Hentai下载器完整教程:免费漫画批量下载终极解决方案

E-Hentai下载器完整教程:免费漫画批量下载终极解决方案

E-Hentai下载器完整教程:免费漫画批量下载终极解决方案 你是否曾在E-Hentai上发现心仪的漫画,却为了一页页手动保存而烦恼?E-Hentai下载器正是你需要的完美解决方案!这款强大的浏览器脚本工具能够智能解析网页内容,实…

2026/7/4 4:28:21阅读更多 →
LIII客户端开发指南:从源码编译到自定义功能的完整路线图

LIII客户端开发指南:从源码编译到自定义功能的完整路线图

LIII客户端开发指南:从源码编译到自定义功能的完整路线图 【免费下载链接】LIII multi-platform bittorrent client 项目地址: https://gitcode.com/gh_mirrors/li/LIII LIII是一款跨平台的BitTorrent客户端,本文将为开发者提供从源码编译到自定义…

2026/7/4 5:58:26阅读更多 →
自动驾驶笔记:Transformer在感知系统中的7个关键应用场景

自动驾驶笔记:Transformer在感知系统中的7个关键应用场景

自动驾驶笔记:Transformer在感知系统中的7个关键应用场景 【免费下载链接】Autopilot-Notes 自动驾驶笔记,以解析各模块知识点、整合行业优秀解决方案进行阐述,以帮助自己及有需要的读者;包含深度学习、deeplearning、无人驾驶、B…

2026/7/4 5:58:26阅读更多 →
为什么SENet-Tensorflow如此强大?揭秘注意力机制在CNN中的应用

为什么SENet-Tensorflow如此强大?揭秘注意力机制在CNN中的应用

为什么SENet-Tensorflow如此强大?揭秘注意力机制在CNN中的应用 【免费下载链接】SENet-Tensorflow Simple Tensorflow implementation of "Squeeze and Excitation Networks" using Cifar10 (ResNeXt, Inception-v4, Inception-resnet-v2) 项目地址: ht…

2026/7/4 5:58:26阅读更多 →
FlipperZeroHondaFirmware:解锁本田汽车钥匙信号的终极RF嗅探工具

FlipperZeroHondaFirmware:解锁本田汽车钥匙信号的终极RF嗅探工具

FlipperZeroHondaFirmware:解锁本田汽车钥匙信号的终极RF嗅探工具 【免费下载链接】FlipperZeroHondaFirmware Custom Firmware for the Flipper Zero, to add support for Honda key fobs (FCC ID: KR5V2X) 项目地址: https://gitcode.com/gh_mirrors/fl/Flipper…

2026/7/4 5:58:26阅读更多 →
AgnosticUI v2:革命性CLI驱动UI组件库,让AI与人类开发者无缝协作

AgnosticUI v2:革命性CLI驱动UI组件库,让AI与人类开发者无缝协作

AgnosticUI v2:革命性CLI驱动UI组件库,让AI与人类开发者无缝协作 【免费下载链接】agnosticui AgnosticUI Local (v2) is a CLI-based UI component library that copies components directly into your project. Works with AI tools, agent-driven UIs…

2026/7/4 5:58:26阅读更多 →
StudioPlugins JSON工具:GsonFormat与JsonToKotlinClass插件使用指南

StudioPlugins JSON工具:GsonFormat与JsonToKotlinClass插件使用指南

StudioPlugins JSON工具:GsonFormat与JsonToKotlinClass插件使用指南 【免费下载链接】StudioPlugins Android Studio 精品插件合集,不在于多只在于精 项目地址: https://gitcode.com/gh_mirrors/st/StudioPlugins StudioPlugins是Android Studio…

2026/7/4 5:53:25阅读更多 →
AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

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

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

2026/7/3 14:18:39阅读更多 →
审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

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

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

2026/7/3 14:38:35阅读更多 →
端到端自动驾驶:从GTC‘26看工程可信落地的核心逻辑

端到端自动驾驶:从GTC‘26看工程可信落地的核心逻辑

1. 项目概述:当算法工程师走进GTC26展厅,看到的不是芯片,而是“端到端”的呼吸节奏“端到端”这三个字,在GTC’26现场出现的频率,高得像NVLink带宽测试时的峰值曲线——它不再是一个论文里的技术路径选项,而…

2026/7/4 0:02:48阅读更多 →
缺牙修复科普:常见义齿类型与选择参考

缺牙修复科普:常见义齿类型与选择参考

缺牙修复科普:常见义齿类型与选择参考牙齿缺失是中老年人群中较为常见的口腔问题,不仅会造成咀嚼不便、进食受影响,长期还可能对营养摄入与日常社交带来困扰。义齿是改善缺牙问题的常用方式,目前市面上的义齿种类较多,…

2026/7/4 0:02:48阅读更多 →
STM32F091RC与LTC6904实现高精度方波信号生成

STM32F091RC与LTC6904实现高精度方波信号生成

1. 项目概述:LTC6904与STM32F091RC的精准方波生成方案在嵌入式系统开发中,精确的时钟信号和定时控制往往是项目成败的关键。LTC6904作为一款低功耗、高精度的可编程振荡器芯片,与STM32F091RC这款ARM Cortex-M0内核微控制器的组合,…

2026/7/4 0:02:48阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/4 1:16:56阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/4 2:33:55阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/4 2:33:55阅读更多 →