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

题一:分割等和子集

解题思路:

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

相关推荐
杜 硕1 小时前
单链表经典算法题
数据结构·算法
YOLO数据集集合1 小时前
智慧工业工地安全防护检测数据集 | 工业安全 防护装备检测 安全帽识别 口罩检测 9097期
人工智能·目标检测·计算机视觉·目标跟踪·智慧工地·工地
daxiangxm2 小时前
【趣味休息】“围住小猫在线玩”-“困住小猫”,又回来了
数据结构·人工智能·vscode·github·php
我不会起名字3222 小时前
一天一道力扣Hot100(37):深度优先算法--括号生成
java·数据结构·c++·后端·python·算法·go
Rabitebla2 小时前
【Linux 系统编程】权限(一):身份、提权,和那 9 个权限位
linux·数据结构·c++·算法
爱吃火鸡面呀2 小时前
基于 dlib 与 OpenCV 的人脸换脸实战:从关键点检测到无缝融合
opencv·目标检测
棣廷2 小时前
初识OpenCV——疲劳检测
人工智能·opencv·目标检测
杜 硕4 小时前
顺序表算法
数据结构·算法