一轮复习——F.动态规划模型总结(入门篇)

入门DP

基本思考方式:

选或不选

枚举选哪个

爬楼梯

枚举最后选哪个:当前状态 i (取x)=之前所有可能状态(取 i - x)的累加和
题目及其解析👇

F.动态规划-入门DP-爬楼梯:70. 爬楼梯

动态规划算法-斐波那契数列模型:3.使用最小花费爬楼梯

F.动态规划-入门DP-爬楼梯:3693. 爬楼梯 II

动态规划算法-似包非包:59.组合总数Ⅳ

F.动态规划-入门DP-爬楼梯:2466. 统计构造好字符串的方案数

F.动态规划-入门DP-爬楼梯:2266. 统计打字方案数

打家劫舍

选或不选:

①方案数型:前一个选或不选的方案数和

优化方式→式子合并:dpi=dp0i-1+dp1i-1;

例题:F.动态规划-入门DP-打家劫舍:2320. 统计放置房子的方式数(有优化详解)

②累加和型:前一个选或不选的最大值+当前贡献

优化方式→单变量更新:dp=max(dp0+x,dp1);dp0=dp1;dp1=dp0;

例题:F.动态规划-入门DP-打家劫舍:198. 打家劫舍(有优化详解)

优化方式→式子合并:dpi=max(dpi+1,dpj+1+numsi0)

例题:F.动态规划-入门DP-打家劫舍:2140. 解决智力问题(有优化详解)

注:爬楼梯类型属于②
题目及其解析👇

F.动态规划-入门DP-打家劫舍:198. 打家劫舍(累加和型)

动态规划算法-简单多状态dp问题:11.按摩师(累加和型)

动态规划算法-简单多状态dp问题:12.打家劫舍Ⅱ(累加和型)

F.动态规划-入门DP-打家劫舍:2320. 统计放置房子的方式数(方案数型)

动态规划算法-简单多状态dp问题:13.删除并获得点数(累加和型)

F.动态规划-入门DP-打家劫舍:3186. 施咒的最大总伤害(删除并获得点数的Plus版,优化方式在于对两个式子的整合,与之前的不同)

F.动态规划-入门DP-打家劫舍:2140. 解决智力问题(与施咒的最大总伤害基本相同,区别点已在博文内列出)

最大子数组和(最大子段和)

以 i 位置结尾......

由于 以 i 位置结尾时只有两种选择:继续接 或 重新开始

因此只与前一个状态dpi-1有关

dpi=Math.max(dpi-1+x,x);→也可写成dpi=Math.max(dpi-1,0)+x;

可以用单一变量代替原本的数组来更新:

dp=Math.max(dp+x,x);→dp=Math.max(dp,0)+x;

注:乘法时不可以写成dp=Math.max(dp,0)×x;因为会有负负得正的情况,

因此要老老实实写dp=Math.max(dp×x,x)
题目及其解析👇

动态规划算法-子数组、子串系列:19.最大子数组和(模板题)

模板题的变形题👇

①整理一下"和"的定义:

F.动态规划-入门DP-最大子数组和(最大子段和):2606. 找到最大开销的子字符串

②求nums和的绝对值的最大值:

F.动态规划-入门DP-最大子数组和(最大子段和):1749. 任意子数组和的绝对值的最大值

③拼接 k 个相同的 nums:

F.动态规划-入门DP-最大子数组和(最大子段和):1191. K 次串联后最大子数组之和

④nums 是个环形数组:

动态规划算法-子数组、子串系列:20.环形子数组的最大和

⑤删除 nums 中的至多一个数:

F.动态规划-入门DP-最大子数组和(最大子段和):1186. 删除一次得到子数组最大和

⑥从nums1和nums2的差值数组中抽像出一个nums:

F.动态规划-入门DP-最大子数组和(最大子段和):2321. 拼接数组的最大分数

⑦求"最大和"改为"求最大积":

动态规划算法-子数组、子串系列:21.乘积最大子数组

相关推荐
懂点Tech5 小时前
ctfshow misc28:GIF 高度修改解题与脚本实现
开发语言·windows·python
微尘hjx5 小时前
【ByteTrack 04】多轨迹算法ByteTrack改进点
算法·yolo·目标检测·目标跟踪·bytetrack·ultralytics·车跟踪
云和数据.ChenGuang5 小时前
Python 重写(Override)深度解析:从 MRO 到 super() 的完整机制
java·开发语言·人工智能·python·langchain·1024程序员节
摇滚侠6 小时前
《On Java 中文版 基础卷》阅读笔记 实现隐藏 12
java·数据库·笔记
美狐美颜SDK开放平台6 小时前
视频美颜SDK试用DEMO阶段应该测试什么?直播APP接入实操指南
开发语言·人工智能·深度学习·音视频·美颜sdk·直播美颜sdk·第三方美颜sdk
dtq04246 小时前
C++小案例 - 日志实战
开发语言·c++
星夜离尘567 小时前
MATLAB ADC 码流触顶诊断:命中数、缺口分段与削顶不可辨识性
开发语言·matlab
路灯上の马陈7 小时前
二叉树的定义与性质
数据结构·二叉树·树结构·1024程序员节
码匠许师傅7 小时前
【C++三方组件】Qt 概览:桌面 C++ 的事实标准与许可证三轨
开发语言·c++·qt
码匠许师傅8 小时前
【C++三方组件】POCO:跨平台系统编程全家桶
开发语言·c++