首先简化问题很明显,每组有用的只有前缀最大值。 先想想贪心,不可做,因为一组的贡献会被其他组影响,所以考虑 \texttt{dp} 组与组之间无序,不能沿编号轴 \texttt{dp} ,考虑值域轴,每接上一个组只需要考虑当前最大值,且较大最大值一定由较小最大值转移而来,所以设 f_i 表示当前最大
怎么感觉我这个考场做法有点非常规啊 还是写写思路吧,初步观察数组 a 的顺序没用,有用的是每个元素的出现次数数组 cnt ,考虑将 cnt 画成直方图研究一下,然后 (x,x,x),(x,x+1,x+2) 分别变为了 3\times 1,1\times 3 的矩形,而且覆盖的时候还能纵向断开(同时这
problem 疑似神题 首先发现一个事情:相同颜色的书一定是一起动或者一起不动,即行为平行。 发现了这件事就可以简单 \texttt{dp} 了。 #include<bits/stdc++.h> using namespace std; #define fio(x) freopen(x".in",
传送门 k 太小了,结合题目易于想到枚举前 2^k 位的状态,然后限制不是一般算法能做的,考虑 \texttt{dp} ,每加一位贡献只跟前 k-1 位有关,设进状态转移,设 f_{i,j} 表示考虑到第 i 位,后 k-1 位状态为 j 的方案数,每次转移分别考
题目传送门 卧槽这题有点牛逼。 像我这种蒟蒻只看题面肯定没有什么头绪,所以只好看一眼数据范围,似乎只能依赖方案在 O(m\log) 内解决。 至于为什么会想到 dp ,应该只能靠感觉吧,这题一看就很有线性dp的味道。 所以由前面的想法可以大概先设个 f_i ,至于 i 的含义只能结合方案的性质和所求
题 Sol 应该存在一种经典技巧吧,就是那种可行性DP通过某种手段(感觉最常见的是贪心)压缩一个状态维度。 看到这个题首先应该有个 \texttt{native} 的想法(基于经验?):考虑设 f_{i,j} 为考虑前 i 个灯笼,能覆盖前缀 [1,j] 的可行性。 然后这里估计能列个方程吧,又或者