- 博客(7)
- 收藏
- 关注
原创 01背包问题之滚动数组(一维)
二、核心概念理解1. 的含义定义:背包容量为时,能装入物品的最大价值。操作:数组全初始化为。公式:(C语言中通过三目运算符实现最大值比较)原因:一维数组本质是二维数组的“压缩”(仅保留当前层和上一层状态)。若先遍历背包,会导致同一物品被重复选取(类似完全背包),而先遍历物品可保证每个物品仅处理一次,符合01背包“每个物品最多选一次”的约束。通过一维滚动数组,在保证逻辑正确的前提下大幅优化空间效率,适用于处理大规模01背包问题。假设我们有2个物品,背包容量为5。二维数组 表示:状态转移(以第2个物
2025-06-16 00:46:30
2081
原创 动态规划01背包问题
dp[i][j]表示“前 ( i ) 个物品中选,背包容量为 ( j ) 时的最大价值”,表格维度为 ( (3 \text{ 物品} + 1) \times (4 \text{ 容量} + 1) )(行从 ( i=0 ) 到 ( 2 ),列从 ( j=0 ) 到 ( 4 ) )。因为“选当前物品后,剩余容量还能装其他物品”,前 i-1 个物品的状态,本质是“剩余容量的最优利用方案”。如果跳过这一步,就会“浪费剩余容量”,无法得到全局最优解——这正是动态规划“状态传递、子问题最优叠加”的魅力所在。
2025-06-14 00:33:27
1834
原创 贪心算法-分发糖果
单次遍历只能保证单侧约束(如左→右只能保证右边孩子糖果更多),无法同时满足双侧约束。通过两次遍历,局部最优解(左右分别满足约束)合并为全局最优解。(如果评分更高),同时不破坏第一次遍历的结果(使用。约束:右边评分更高的孩子糖果更多)避免覆盖第一次遍历的结果。两次线性遍历,时间复杂度为。已在左→右遍历时被设为。确保每个孩子的糖果数。确保每个孩子的糖果数。(用于存储糖果数组)。
2025-05-31 21:57:03
379
原创 动态规划--打家劫舍1
nums[i]是第i个房间的现金数额。通过比较偷和不偷第i个房间的结果,选择最大值,可以确保每一步的决策都是最优的,从而得到全局最优解。这个问题的核心是对“相邻房间不能同时偷”规则的理解。我们通过逻辑分析和示例演示来彻底弄清楚:规则回顾:相邻房间不能同时偷如果两间相邻的房屋在同一晚上被小偷闯入,系统会报警。相邻指的是房间编号连续(如第1间和第2间、第2间和第3间)。不能同时偷相邻的房间,但可以隔一个或多个房间偷(如第1间和第3间、第1间和第4间)。为什么偷第3间房时,第2间房不能偷?
2025-05-28 09:20:39
2065
原创 qt学习1
/Teacher 类 老师类//Student 类 学生类//下课后 ,老师触发一个信号 ,学生响应信号 ,请客吃饭//创建一个老师对象//创建一个学生对象//老师饿了 学生请客的连接//调用下课函数//下课函数,调用后 触发老师饿了的信号delete ui;qDebug()<<"请老师吃饭";Q_OBJECTpublic:signals://自定义信号 写到signals下//返回值是void,只需要声明,不需要实现//可以有参数,可以重载。
2025-01-15 02:26:06
453
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅