20240913 ARC104

20240913 ARC104

感觉后四题价值都很高,dp 还是弱项,待加强。

A Plus Minus

水,略。

B DNA Sequence

只有对应的两种字符数量相等才能满足条件,直接 \(O(n^2)\) 枚举子串可过。用 unordered_map 开桶能做到 \(O(n)\)

C Fair Elevator

赛时没想到 dp,乱搞做法差 1 个点就过了。

考虑 dp,设 \(f_i\) 表示前 \(i\) 个位置能否完成分配。转移时枚举一个独立的区间 \([j,i]\),判断这个区间是否可行并转移。

考虑如何判断一个独立区间是否合法。不妨设这个区间内没有独立的区间,否则可以从另一个状态转移。注意到所有的 \([a_i,b_i]\) 间不存在包含关系,所以这个独立区间内的所有区间一定两两相交。于是这个独立区间会是这样:\(\{a_{i_1},a_{i_2},...,a_{i_m},b_{i_1},b_{i_2},...,b_{i,m}\}\)。根据这个性质判断就好。

似乎可以搜,但要剪枝。

D Multiset Mean

遗憾的,赛时连第一层转化都没想到,乱七八糟想,浪费很多时间。又 get 一种多重背包优化。

先考虑对于每个平均值 \(x\) 单独求解。将每个数的价值减去 \(x\),那么问题转化为选出一些数使和为 0。显然可以多重背包求,但是 \(O(n^4k)\)

再次转化,和为 0 也就是说正数和与负数和的绝对值相等。又注意到可选的正数和负数都是一段连续的数,于是可以预处理 \(f_{i,j}\) 表示选 \([1,i]\) 的数,每个数最多 \(k\) 个,和为 \(j\) 的方案数。这里的多重背包可以用前缀和优化,是 \(O(n^3k)\) 的。那么答案为 \(c_x=(k+1)\sum_{i=0}^{\frac {kn(n+1)}{2}} f_{x-1,i}f_{n-x,i}-1\)

posted @ 2024-11-08 15:27  陆羽扬  阅读(1)  评论(0编辑  收藏  举报