首页 > 其他分享 >关于区间DP的一点点心得(虽然还是很菜)

关于区间DP的一点点心得(虽然还是很菜)

时间:2022-09-24 11:56:11浏览次数:87  
标签:很菜 应当 信息 如何 DP 区间 心得 dp

关于区间DP的一点点心得

  1. 区间 DP 的数组一般是二维,其状态一般表示区间 \((l,r)\)。

  2. 区间 DP 在思考的时候是有一定套路的,思考时可以按照如下方式进行思考:

    1. 这段区间要维护的信息是什么(即 \(dp\) 或 \(f\) 数组内的值应该存什么)?
    2. 状态的边界如何设计(这个我认为对于所有的 DP 来说,都应当是其思考过程之一)?
    3. 这段区间如何从它的更小的区间推广过来(即如何从 \(dp(l,r)\) 或 \(f(l,r)\) 的子区间转移到本身)?
    4. 怎样合并或更新信息(即如何统计信息,是取最大值还是最小值,是应该使用加法原理合并方案数还是用乘法原理)?

    对于大部分人(尤其是我)来说,以上三点基本上是区间 DP 的全部思维难点。

    对于第一条来说,如果让我们维护最大值,我们应当怎么办,维护方案个数我们又应当怎么设计维护的信息。

    对于第二条来讲,我们应当考虑一下数组的初始值应当是什么值,边界值又应当是什么值,那些情况下就到达了边界情况等等都应当被考虑,并且编写代码的时候千万不要忘了这一步,否则很有可能会莫名其妙地 WA 掉。

    而对于第三条如何推广,是通过两个子区间推广过来(即为 \(dp(l,r)\) 是从 \(dp(l,k)\) 和 \(dp(k+1,r)\) 转移而来),还是单纯的左端点减一或右端点减一推广而来(例如题目 P3205 [HNOI2010]合唱队)。

    至于第四条,就是要考虑合并子区间信息并更新区间信息时,我们如何正确的合并(例如单纯的加减),并且如何正确的更新区间信息(例如单纯的赋值),还有就是需不需要进行分类讨论,有没有什么可能会出现的坑点之类。

  3. 区间 DP 的板子:
    众所周知,DP 类题目一般是没有板子的,但是根据自己那微薄的做题量分析,发现其中还是有一定的规律的,基本形式如下:

memset(dp,状态初始值,sizeof(dp));
for(int i=1;i<=n;i++)
	dp[i][i] = 状态边界值;
for(int len = 2;len<=n;++len){
	for(int l=1;l+len-1<=n;++l){
		int r = l+len-1;
		//这里写如何从子区间当中推广出来 
	}
}
cout<<dp[1][n]<<endl;//统计答案并输出(注意,这里所写的方法不唯一,在某些情况下不适用!!) 
  1. 例题:
    这里先咕咕咕,马上安排

标签:很菜,应当,信息,如何,DP,区间,心得,dp
From: https://www.cnblogs.com/larry76/p/16725251.html

相关文章

  • dpdk21.11 添加igb_uio模块
    目录IGB_UIO模块两种添加方式零、下载IGB_UIO模块一、直接添加到文件中1.1复制dpdk-kmods/linux/igb_uio/到dpdk-stable-21.11.1/kernel/linux/目录下1.2修改mes......
  • expdp 排除特定表以及query导出部分数据
    在dba日常运维过程经常会用到导出某个schema并排除部分表,或者是某个表里的部分数据这种需求。1.导出schema排除特定表(通过sys导出)特殊字符需要转义,否则会报错expdp\'sy......
  • dp套路
    开始补dp了。状压dp常见套路:数据范围小,能将状态用\(0/1\)表示,且状态的表示一般有所限制(例如不能将两个\(1\)放在一起)。若设当前行状态为\(S\),则\((S<<1)\&S\)......
  • wxWidgets UI 库 简单示例和 高清屏 DPI 适配
    wxWidgets是一种跨平台开发的UI库,winmacOSubuntu都有很好的本地实现。版权友好,个人商业用途都可以,静态编译也比较容易,开发的比较出名的软件有:Filezilla、Aegisub......
  • 数位DP
    模板题:1082.数字游戏题目描述求整数区间[L,R][L,R]内,不降数的个数不降数:数位从高到低呈非下降关系(【例】:123,446)代码#include<bits/stdc++.h>usingnamespace......
  • 做题记录整理dp11 P4158 [SCOI2009]粉刷匠(2022/9/23)
    P4158[SCOI2009]粉刷匠事实上前半个小时我甚至没想用dp做。。。感觉这道题难度标高了(跟那个想让我测出题人的码的题相比)首先可以发现每一行之间都是独立的,所以先考虑把......
  • 做题记录整理dp9 P1758 [NOI2009] 管道取珠(2022/9/23)
    P1758[NOI2009]管道取珠这道题的难点就在于赋予ai的平方和一个具体的含义,我们可以想到(其实要不是上课听了根本想不到)ai的平方和其实就是两个管道取珠游戏一起玩,然后取......
  • 做题记录整理dp810 P2254 [NOI2005] 瑰丽华尔兹(2022/9/23)
    P2254[NOI2005]瑰丽华尔兹题解这题的难点在与dp的递推方程的书写如果写对了递推方程,想到单调队列优化是很自然的(然而我想到了不会打)还有递推方程的具体代码实现也挺......
  • 做题记录整理dp8 P5665 [CSP-S2019] 划分(2022/9/23)
    P5665[CSP-S2019]划分这题其实并不是题单的第八题,但我现在一做完题目马上就想来(测出题人的码)整理题目因为这题是真的恶心首先朴素的n三次方dp,枚举上一个端点,以及上上......
  • 【线性dp】 [SCOI2009]粉刷匠
    点个关注点个赞吧一道比较简单的线性dp题目前置知识:会手推一些简单的状态转移方程、较为熟练地掌握背包问题模型[SCOI2009]粉刷匠题目描述windy有\(N\)条木......