关于动态规划【纯粹的0-1背包需要思考的问题】

目录

一、题目和代码

二、需要思考的问题


一、题目和代码

0-1背包问题:有几个物品,和一个书包,每个物品有重量和价值,书包有一个最大能装的质量,问这个书包能装的最大价值。其中,每个物品只有一个,这就是0-1背包问题

方法一:(二维数组的代码)

方法二:(一维数组的代码)

二、需要思考的问题

问题一:0-1背包问题怎么用二维数组实现?

回答一:(见上图,详细解释一下递推关系)

问题二:用二维数组实现的时候,两个for循环颠倒一下顺序可不可以?

回答二:可以

问题三:0-1背包问题怎么用二维数组实现?

回答三:(见上图,详细解释一下递推关系)

问题四:用一维数组实现的时候,两个for循环颠倒一下顺序可不可以?

回答四:不可以。因为先遍历物品就相当于先遍历行,而一维数组需要一行一行遍历,也只能一行一行遍历。

问题五:用一维数组实现的时候,第二个for循环为什么是从后往前?为什么不能从前往后?

回答五:因为当前的一维数组存的是上一层的数据,需要在当前位置计算出新数据的时候要借助当前位置前面的旧数据,所以不能从前往后。否则当前位置的前面就是新数据了。我们计算的时候需要当前位置的前面的旧数据。

问题六:为什么前面用二维数组实现的时候,第二个for循环就是从前往后或者从后往前都可以?一维数组的第二个for循环就必须从后往前

回答六:因为二维数组计算当前位置的结果时需要借助旧数据,这个旧数据在上一层,不存在旧数据可能被覆盖的情况,所以二维数组的第二个for循环从前往后或者从后往前都可以。但是一维数组第二个for循环从前往后计算新数据的时候,会把旧数据覆盖,后面的位置将无法计算出正确的结果。

相关推荐
Sagittarius_A*2 小时前
后量子密码|前置基础 03|数字签名运行逻辑:签名签发、核验原理与实际业务应用
算法·信息安全·密码学·数字签名·后量子密码
DBA小马哥2 小时前
向量数据库入门到进阶:Embedding、ANN算法与RAG落地的关键术语
数据库·算法·embedding
Luhui Dev3 小时前
如何在 WorkBuddy 中使用大角几何:从 MCP 接入到 AI 几何作图
人工智能·数学·算法·agent·luhuidev
Smilecoc3 小时前
决策树(五):决策树回归
算法·决策树·回归
小龙报3 小时前
【优选算法】1.搜索插入位置 2.x的平方根
java·c语言·数据结构·c++·python·算法·蓝桥杯
Hi李耶3 小时前
【LeetCode】15.三数之和
java·算法·leetcode
rannn_1114 小时前
【力扣hot100】链表专题|21、2、19、24、92、25
java·数据结构·算法·leetcode·链表·开发
SNAKEpc121385 小时前
OpenGL(十五)- 着色器语言GLSL
c语言·c++·线性代数·算法·矩阵·图形渲染·着色器
AI服务老曹5 小时前
AI视频分析API完整流程:设备、算法与告警接口接入指南
人工智能·算法·音视频
鹿角片ljp5 小时前
LeetCode 21. 合并两个有序链表
算法·leetcode·链表