ABC400 FG 做题记录
ABC400 FG 做题记录
F. Happy Birthday! 3
先断环成链。
可以发现两次操作如果相交,则一定真包含。(否则对于两个操作中的第一个,删去相交的部分,花费变少但效果不变。)这种“相交包含”的性质是可以区间 dp 的。
设 \(f(l, r)\) 表示 \([l, r]\) 区间的最小花费。转移枚举中间点,要考虑到颜色相同的情况,随便搞搞。
G. Patisserie ABC 3
把蛋糕两两配对是不好处理的。我们把原问题称为问题 \(A\),把它转化为:
- 每个蛋糕有三种属性。每个蛋糕要么选择恰好一种属性,要么不选择。我们要选择总共 \(2K\) 个属性,满足每种属性选择的个数都是偶数,在此基础上最大化选择的属性的和。(问题 \(B\))
这样就规避了“配对”的问题。
严谨起见,我们要证明这两个问题是等价的。也就是说,我们要证明问题 \(A\) 的最优解必须在问题 \(B\) 中出现,且它在问题 \(B\) 中也是最优解。简单来说,\(A\) 的一个解唯一对应 \(B\) 的一个解,但 \(B\) 的解可能不是 \(A\) 的解,因为两两配对时没有取到 \(\max\)。换句话说 \(B\) 的解集是 \(A\) 的解集的超集,包含了一些无用的解。但这些无用的解一定不是最优的,所以当我们只考虑求出最优解时,两个问题是等价的。
容易设计出 \(O(NK)\) 的 dp:设 \(f(i, j, x, y)\)(\(x, y \in \{0, 1\}\))表示在前 \(i\) 个蛋糕中选择 \(j\) 个属性,且选择 \(X, Y\) 属性的个数的奇偶性分别为 \(x, y\) 时,属性值的最大和。(不用记录 \(z\) 的奇偶性,因为可以从 \(j, x, y\) 推出)转移是显然的。
考虑优化。可以发现奇偶性的限制是比较松的。如果没有这个限制,那么我们把蛋糕按 \(\max(X, Y, Z)\) 从大到小排序以后贪心地选择前 \(2K\) 个就是最优的。加上这个限制以后,我们期望只进行一些微调就能得到合法的答案。实际上可以证明:前 \(2K\) 个蛋糕中最多有 \(2\) 个不选。证明如下:
对于一种属性,如果在前 \(2K\) 个蛋糕中没有选择,而在后面选择了,那么把后面的替换成
有了这个结论以后,就可以在两部分中分别 dp 然后合并答案。由于“选了几个”这一维度的长度被压缩至 \(3\),所以 dp 的时间复杂度为 \(O(N)\)。总时间复杂度为 \(O(N \log N)\),瓶颈在排序。代码