【题目练习】动态规划+背包问题

题一:分割等和子集

解题思路:

1、求数组总和 sum,如果 sum%2 !=0 → 直接返回 false

2、target = sum / 2,相当于背包容量 target,看能不能凑出总和 target

3、dp j:容量 j 的背包,能凑出的最大和

3、递推公式:dpj = max(dpj, dpj - nums\[i] + numsi)

4、遍历:物品正序,容量倒序

5、最后判断 dp target == target?相等说明可以分割

计算数组总和

遍历所有数字

累加求和

总和是奇数,不可能平分

背包目标容量,需要凑出target

开辟dp数组,dpj代表容量j背包能凑的最大和

dp全部初始化为0

遍历物品(每个数字就是物品,重量=价值=numsi)

01背包:容量倒序,从target往numsi遍历

递推公式:不选numsi就是dpj;选就是dpj-nums\[i]+numsi,取大

最大和刚好等于target,代表可以平分

释放动态数组,防止内存泄漏

题目二:爬楼梯

解题思路:

1、dp数组定义:dpi:爬到第 i 阶楼梯的方案数量

2、递推公式:dpi = dpi-1 + dpi-2

3、到第 i 阶,最后一步要么走 1 阶(前面 i-1 阶),要么走 2 阶(前面 i-2 阶),方案相加

4、初始化:dp 1=1,dp 2=2

5、遍历顺序:从小到大正序遍历

边界:1层楼梯,只有1种方案

边界:2层楼梯,1+1 或者 2,共2种方案

1、dp数组,dpi:爬到i阶台阶的方案数

2、初始化:1阶,方案1

3、初始化:2阶,方案2

1、从第3阶开始一直到n阶,正向遍历

2、递推公式,两种方案相加

释放内存

n=4输出5

相关推荐
逆向编程12 小时前
MATLAB高级数据结构:cell、struct与table深度应用
开发语言·数据结构·matlab
m0_639906941 天前
Redis入门|五种数据结构、使用场景、持久化RDB&AOF
数据结构·数据库·redis
2601_970703831 天前
工业除湿机租赁:把一份租金合同拆开看
大数据·数据结构·算法·数据库架构·推荐算法
丘山望岳1 天前
单调栈和单调队列
数据结构
沃达德软件1 天前
智慧无人机图像识别分析技术
人工智能·目标检测·计算机视觉·目标跟踪·视觉检测·无人机
UIU1141 天前
P16237 [蓝桥杯 2026 省 B] 应急布线
数据结构·c++·算法·蓝桥杯
黎相思2 天前
BTree
数据结构·b树·b+树
UIU1142 天前
P1233 [ICPC 2001 Taejon R] 木棍加工
数据结构·c++·算法·动态规划
niyongsheng2 天前
3D 装箱算法工程化:数据结构、放置启发式与支撑规则
数据结构·算法·rust
迪菲赫尔曼2 天前
【基础篇 11】把官方源码放到服务器:版本、解压层级和安装位置,一次弄清楚
运维·服务器·开发语言·人工智能·python·yolo·目标检测