[贪心] [dp] AT_agc064_d [AGC064D] Red and Blue Chips

posted on 2025-04-25 03:06:04 | under | source

将原序列视为 \(m\) 个形如:一个 B 前面紧跟着一段极大 R。不妨从左往右依次给予每个 B 编号,不难发现结果序列中 B 的编号是任意排列 \(P\) 满足 \(P_m=m\)。再考虑 R,对于第 \(i\) 个 B 前面跟着的每个 R,都可以选择接在第 \(j\ge i\) 个 B 前面。

考察结果序列是否可构造,首先不用考虑第 \(m\) 个 B,因为前面的 B 都满足了它肯定也满足。然后要给前 \(m-1\) 个 B 编号,显然有贪心:优先给跟着的 R 数量较大者较大的编号。于是得出判定条件:

  • \(a_1\dots a_{m-1}\) 为原序列前 \(i\) 段连续 R 的数量、\(b_1\dots b_{m-1}\) 则是结果序列的。
  • 合法当且仅当 \(\forall i,b_i\le a_i\)

直接按数值从小到大 dp,记 \(f_{i,j,k}\) 为考虑 \(1\dots i\) 的数值,总和为 \(j\),选了 \(k\) 个的权值和。权值为每种值次数的阶乘逆元之积,用于计算多重排列。答案枚举第 \(m\) 个 B 前面接了几个 R 即可。

调和级数,复杂度 \(O(n^3\log n)\)

posted @ 2026-01-13 11:20  Zwi  阅读(0)  评论(0)    收藏  举报