dp按照规模分类总结
本文章的内容来源于花花酱dp2。
做多了dp的题目之后总觉得有什么规律,但是自己没总结出来。花花酱按照输入规模、子问题个数、在解决一个问题的时候需要依赖的子问题个数为特征对题目做了分类。
其中绿色是比较简单的 ,黄色是中等的,粉色是比较难的。
对上面几种分类取其中一些做进一步分析,写出模板。
1.1
输入O(n)
有n个子问题需要解决
每个子问题依赖常数个更小的子问题
时间复杂度:O(n)
空间复杂度:O(n)->O(1)
模板
dp = [0] * n;
for i = 1 to n:dp[i] = f(dp[i-1],dp[i-2]...)return dp[n]
LC 70:climbing stairs
dp[i] := 到达第i级台阶的方法
dp[i] = dp[i-2] + dpp[i-1]
LC 198: house robber
dp[i][0] := 从0到i,抢第i个房间,抢到的最大价值。
dp[i][1] := 从0到i,不抢第i个房间,抢到的最大价值。
dp[i][0] = max(dp[i-2][1],dp[i-2][0])+A[i]
dp[i][1] = max(dp[i-1][0],dp[i-1][1])
LC 801 Minimum Swaps To Make Sequences Increasing
dp[i][0] := 从0到i,交换A[i]/B[i]的最小交换次数
dp[i][1] := 从0到i,不交换A[i]/B[i]的最小交换次数
1.2
输入O(n)
有n个子问题需要解决
每个子问题依赖所有比它小的子问题
时间复杂度:O(n2n^2n2)
空间复杂度:O(n)
模板
dp = new int[n]
for i = 1 to n:for j = 1 to i-1:dp[i] = max/min(dp[i],f(dp[j]))
return dp[n]
LC 139 word break
dp[i] := wordbreak(A[0->i])
dp[i] = any(dp[k] && word(A[k+1->i]))
LC 818 race car
dp[i][0] :=到达位置i并且速度方向向右
dp[i][1] :=到达位置i并且速度方向向左
for k in range(1,i):c = min(dp[k][0]+2,dp[k][1]+1)dp[i][0] = min(dp[i][0],dp[i-k][0]+c)dp[i][1] = min(dp[i][1],dp[i-k][1]+c)
1.3
输入:O(m)+O(n)
dp[i][j] := 解决子问题(A[0->i],B[0->j])的答案
dp[i][j] 依赖常数个子问题的解
时间复杂度O(mn)
空间复杂度O(mn)
模板
dp = new int[m][n]
for i = 1 to m :for j = 1 to n:dp[i][j] = f(dp[i-1][j-1],dp[i][j-1],dp[i-1][j])return dp[m][n]
LC 72 edit distance
dp[i][j] := 从字符串A[0->i]变为B[0->j]最少操作数
dp[i][j] = f(dp[i-1][j-1],dp[i][j-1],dp[i-1][j])
1.4?
输入:O(n)
dp[i][j] :=子问题(A[i->j])的解,A[i->j]是输入的子串或者子数组
每个子问题依赖O(n)更小的子问题
模板
dp = new int[n][m]
for l = 1 to n:for i = 1 to l:j = i+l-1for k = i to j:dp[i][j] = max(dp[i][j],f(dp[i][k],dp[k][j]))return dp[1][n]
LC 312 burst balloons
LC 664 strange printer
2.1
输入O(mn)
dp[i][j] := 解决子问题(A[0->i][0-j])的解
每个子问题依赖常数个子问题
时间 复杂度O(mn)
空间复杂度O(mn)
模板:
dp = new int[m][n]
for i = 1 to m:for j =1 to n:dp[i][j] = f(dp[i-1][j],dp[i][j-1])return dp[m][n] / max(dp[m])
LC 62 unique paths
dp[i][j] := 从A[]0[0]到A[i][j]有几种方式
dp[i][j] = dp[i-1][j] + dp[i][j-1]
2.2
输入O(mn)
dp[k][i][j] := 在k步之后解决子问题A[0->i][0-j])的解
每个子问题依赖一个子问题
时间复杂度O(kmn)
空间复杂度O(kmn)->O(mn)
模板
dp = new int[k][m][n]
for k = 1 to K:for i = 1 to m:for j = 1 to n:dp[k][i][j] = f(dp[k-1][i+di][j+dy])return dp[K][m][n]/m(dp[K])
LC 576
dp按照规模分类总结相关推荐
- 计算机网络安规模分类,1计算机网络按规模分类
1计算机网络按规模分类 一.填空题 1.计算机网络按规模分类,可分为和. 2.中继器是一种工作在层的设备:网桥是一种工作在作在 层的设备. 3.Internet的中文名为网. 4.E-mail指的是: ...
- uoj#246. 【UER #7】套路(dp+分块?分类讨论?)
题目链接 分析: 目前为止我只能理解dp部分 我就喜欢这种单纯不做作的题目 一看名字就明白了这道题的本质 中二的题目描述 很显然,我们的关键就是求出最小相似度 朴素算法n^4 如果我们现在有一个权值数 ...
- 家用计算机按规模分类 属于以下哪一,对于计算机的分类,下列计算机是按照计算机规模、速度和功能等划分的是:...
问题:对于计算机的分类,下列计算机是按照计算机规模.速度和功能等划分的是: 更多相关问题 K市是重要高科技工业城市.H镇位于K市近郊,是正在筹建中的K市卫星城市.为了发挥K市在发展高科技产 某些精神失 ...
- 【luogu P5056】【模板】插头dp(插头DP)(分类讨论)
[模板]插头dp 题目链接:luogu P5056 题目大意 有一个 n*m 的网格,每个格子要么必须铺线,要么必须不铺. 然后问你有多少个铺发使得形成一个闭合回路. 思路 快乐插头 DP 模板题. ...
- HDU中一些DP的题目分类
DP是难点,供自已以后系统学习. 1.Robberies 连接 :http://acm.hdu.edu.cn/showproblem.php?pid=2955 背包;第一次做的时候把概率当做 ...
- 支撑千万规模类别分类技术,百度飞桨定义工业级深度学习框架
2016 年,AlphaGo 横空出世,人工智能时代到来.同年,百度开源自研的深度学习框架 PaddlePaddle(飞桨),成为中国首个开源深度学习框架. 然而,这波由深度学习推动的技术和产业浪潮, ...
- Team Task:DP
我分到的任务是看ppt--so这篇blog大概就是我的任务进度了?好像还混杂了一些奇怪的求助-- 提纲篇 又名如何高效看PPT? 动态规划优化.pdf By ExfJoe 2018/4/11 14: ...
- 全球及中国煤层气开发产业运营规模与十四五战略决策建议报告2022版
全球及中国煤层气开发产业运营规模与十四五战略决策建议报告2022版 <出版单位>:鸿晟信合研究院[专员客服对接] <修订日期>:2022年2月 <客服人员>:周文文 ...
- 算法精品讲解(2)——DP问题入门(适合零基础者,一看就会)
目录 前言 DP问题它是什么(了解) 从中学的例题谈起 再来说一下,DP问题的核心思想(理解) DP问题的解决方法 先说方法论: 再说具体的例子 例一: 例二: 例三: DP和搜索的关系 结语 前言 ...
最新文章
- 几个不错的网页载入页面
- 堰流实验报告思考题_堰流流量系数测定实验
- linux 有线网络管理,uos linux网络管理
- java ajax无权限跳转_如何在ajax权限判断后跳转?
- 添加栏目HyperLink
- cpu负载过高问题处理
- JAVA EE 6 jar包集合_Java EE6将JSF facelets(xhtml)和ManagedBeans打包成JAR
- 批处理文件中获取当前所在路径的几种方法,以及写文件到txt
- Android内存优化11 内存泄漏常见情况2 线程持久化
- 计算机房防凝露保温材料,机房保温的方案.docx
- VSCode下载安装和修改插件下载位置(配置右键菜单)
- Topaz DeNoise AI 3.7 人工智能降噪
- pwnable.kr_mistake
- Linux命令退格键变成^H的解决办法
- web前端html怎么求最大值和最小值,求js数组的最大值和最小值的四种方法
- Android 自定义锁屏_三星Key Cafe 2021最新版下载-三星Key Cafe自定义键盘输入app v1.0.00.26...
- 田野调查手记·浮山摩崖石刻(九)
- 2022年茶艺师(中级)考试模拟100题模拟考试平台操作
- 最简单日柱推算法_乒乓球技术中的反手台内拧,如何练最简单?满场飞的乒乓球步法怎么练?反手拧拉两段练习法,一练就会 胖子说乒乓视频教学...
- AndroidStudio gradle 7.0+配置说明