杂题乱刷2
杂题乱刷
P10141 [USACO24JAN] Merging Cells P
题目大意
给一个序列,每次可以合并两个相邻的数,变成他们的和,编号变成较大的数的编号(相等就变成编号较大的数的编号),问最后剩下一个数,他的编号为 \(i=1\sim n\) 的概率
solution
设 \(f_{i,j}\) 表示将 \([i,j]\) 合并后的概率,那么从 \([1,n]\) 开始转移到 \([i,i]\) 即可计算出答案
观察转移,我们像区间DP一样分裂成两个区间,但这道题对其中一个有贡献,并且恰好分为两部分,于是就考虑前后缀优化DP,用二分找到断点
P4770 [NOI2018] 你的名字
题目大意
给定一个
CF1037H Security
[ABC215G] Colorful Candies 2
题目描述
现在有 \(n\) 个糖果, 每个糖果有一种颜色 \(c_i\).
现在高桥君想要在中间选 \(k\) 个糖果,他的快乐值是选择的糖果的颜色种类数.
对于 \(\forall k \in [1,n]\), 求出高桥君随机选择 \(k\) 个糖果的快乐值的期望值, 对 \(998244353\) 取模.
\(n \le 5 \times 10^4\), \(c_i \le 10^9\).
solution
首先一眼 \(O(n\sqrt n)\)
分析一下题目,令 \(b_i\) 表示颜色 \(i\) 出现的个数,颜色本身不重要,所以 \(b_i\) 相同的,本质相同
因为 \(\sum b=n\),所以最多只有 \(\sqrt n\) 个
那么问题就变成了从 \(n\) 个球,其中有 \(i\) 个特殊球,取出 \(k\) 个,取到特殊球的概率
显然可以在 \(O(n)\) 的时间复杂度依次处理 \(k=1\sim n\)
[USACO24FEB] Lazy Cow P
题目描述
给定 \(n\) 个要求,形如 \((m,b)\) ,要求前 \(m\) 个数的和要大于等于 \(b\) ,每个数的贡献为 \(3^{X-1}\)。问为了满足前 \(k(k=1 \sim n)\) 个要求,贡献最小为多少。
solution
首先考虑计算答案,对于一个要求,我们最好的做法是均分
对于一串 \(m\) 递增的要求,我们发现一个个做并不正确,如果后面平均下来的值更大,那我们不如在前面就做更多题,即 \(\dfrac bm\) 应该满足单调递减。
于是这道题变成维护 \((m,b)\) 的凸包,要求支持随机插点,向左右更新,用 \(set\) 维护即可
P1410 子序列&P4728 [HNOI2009] 双递增序列
双倍经验
题目大意
给定一个长度为 \(N\)(\(N\) 为偶数)的序列,问能否将其划分为两个长度为 \(N / 2\) 的严格递增子序列。
\(N\le2000\)
solution
考虑dp,一般的LIS做法,为了满足正确性,维数可能需要3到4维,这道题问的只是可行性,用DP数组存 \(0/1\) 显然不优,考虑把状态转到dp值上
设 \(f_{i,j}\) 表示做完前 \(i\) 个后,\(a_i\) 那个集合里有 \(j\) 个数,另一个集合的最小值
转移就考虑放在哪个集合即可