【题解】Solution Set - NOIP2024集训Day24 DP常⻅模型3「区间」
【题解】Solution Set - NOIP2024集训Day24 DP常⻅模型3「区间」
https://www.becoder.com.cn/contest/5511
「CF1572C」Paint
一个结论:钦定一个区间最终变成的颜色为这个区间的右端点颜色,是不劣的。(纯感觉出来的😅
Why?(写完之后又想了想
考虑数学归纳。
显然结论对于区间长度为 \(1\) 的成立。
对于 \([l,r]\) 如果结论成立,我们在 \(r+1\) 加入一个新颜色 \(a_j\)。
如果:
- \(a_{j-1}=a_j\),\([l,r+1]\) 肯定等于 \([l,r]\) 的最优解。
- \(a_{j-1}\ne j_j\),因为 \([l,r]\) 变成右端点是最优的,我们与其把 \(a_j\) 变成 \(a_{j-1}\),不如直接把 \([l,r]\) 花费一次变成 \(a_j\)。
\(f_{i,j}\):区间 \([i,j]\) 变成 \(a_j\) 颜色的答案。
暴力枚举断点还是 \(O(n^3)\) 的。
我们把 \(a_j\) 的所有位置拿出来,如果断点处于两个 \(a_j\) 之间,其实是不优于断点取在其中一个 \(a_j\) 上的。(因为我们显然把更多的无关元素堆在一起是更容易出最优解的。
又因为为每个元素出现次数不会超过 \(20\),这样我们每次转移就是 \(O(20)\) 的了。
「ABC219H」Candles
和 「BalticOI 2009 Day1」甲虫 这道题是类似的,不同的是现在这道题算是加强版,每个位置的初始值由定值变成了变量。
但其实感觉本质是一样的。
用同样的做法,枚举有多少蜡烛是对答案产生贡献的,算减少的最少量。
但是实际上这是错的:WA 74pts
因为这里每个地方的蜡烛并不是等价的,对于一段区间我们可能并不会把她们全部选完。
Hack:
3
1 5
5 1
10 20
(这里的 5 1 就不会取,答案应该是 14
解决办法是,我们不枚举,而直接放在状态里面去 dp,这样就可以考虑到区间内有些没有贡献的点了。
具体的,我们定义 \(f_{i,j,k,0/1}\) 表示熄灭区间 \([i,j]\) 之后,还有 \(k\) 个蜡烛会对答案产生正向贡献,最后停在左边。右边。
「HAOI2016」字符合并
\(f_{i,j,s}\):区间 \([i,j]\),缩成了 \(s\) 的最优解。(\(s\in [0,2^{k-1}]\)。
状态数就已经了 \(10^7\) 了,发现转移需要 \(O(n)\),GG 了。
想办法换一个更好的状态定义。
12min passed...
确实没有想到什么更好好刻画状态的定义方式了。
???状态定义就是这个?那我再想想转移。
哦!
有点愚蠢,填表法肯定可以做(但是我觉得不是很好想,之前还在想枚举断点来着😅),下面考虑刷表法。
我们钦定每次 \(s\) 的长度大于等于 \(k\) 之后就一定会合并起来(如果不合并的话,这种方案一定会被其她的 dp 算到。
从 \([l,r,s]\to [l,r+1,s+c]\),\(c\) 是原串 \(r+1\) 位的值。现在就是 \(O(1)\) 转移了。
emmmmmm,我就说不对啊,肯定还是得枚举断点的,不然会 WA 5pts。
Hack x1:
4 2
1010
1 4
0 3
0 10
1 5
(算 \(f_{1,4,*}\) 的时候要从 \(f_{1,2,0}\) 和 \(f_{3,4,0}\) 转移过来。
不行了,看题解去了。
???
枚举组成当前 st 末位的区间 \([l,j]\),发现只有区间长度为 \(1,k,2k-1\dots\) 的合法,所以每次减 \(k-1\),于是时间复杂度:\(O\left(n^2\left\lfloor \dfrac n{k-1}\right\rfloor 2^{k-1}\right)\)。
md,这不就是我一开始想的吗???什么精细实现。😥
算了一下确实好像不会超过 \(5\times 10^8\)。
「AGC062B」Split and Insert
我们重编号一下,可以变成初始任意排列,最后要求升序。
\(f_{i,j,k}\):在前 \(k\) 次操作内将 \([i,j]\) 变成升序的最优解。
有转移:
然后 \(O(n^3k)\) 做完了?nb,这都有紫。
好像一开始是那个转化不太行。
问题不大,我们直接把 \(c_i\) reverse 一下也是同样的效果。
哦有点道理,我们 \(f_{i,j,k}\) 中的 \([i,j]\) 不能表示下标,而应该是值域。
这样算出来的贡献才是准确的。
「Gym 102798K」Tree Tweaking
我们对所有的区间取并集。
一点思路没有。
https://www.cnblogs.com/rainybunny/p/15164792.html
注意:这里较平常的笛卡尔树,是把「下标」和「值」交换了的。所以是「值」二叉搜索树,「下标」堆(其实这样才正好是题目的要求。
我们算的就是最小子树大小之和。
「AGC028D」Chords
圆上的两条连边相交当且仅当,这两条线的区间有交且不存在包含关系。

浙公网安备 33010602011771号