专栏文章

题解:CF403D Beautiful Pairs of Numbers

CF403D题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@mio08dtb
此快照首次捕获于
2025/12/02 11:14
3 个月前
此快照最后确认于
2025/12/02 11:14
3 个月前
查看原文
*2300 的 组合计数。
两个条件:
  1. 1a1b1<a2b2 ... <akbkn1 \le a_1 \le b_1 < a_2 \le b_2 \ ...\ < a_k \le b_k \le n
  2. biaib_i-a_i 互不相同。
肯定要预处理所有 (n,k)(n,k) 组合的答案,因为 tt 很大,但 n,kn,k 较小。
先尝试求出有解的充要条件。根据条件 1 可知,相邻一对至少会增加 11,有 k1k-1 次增加,因此有 bka1=(i=1kbiai)+k1n1b_k-a_1=(\sum\limits_{i=1}^k b_i-a_i)+k-1 \le n-1,解得 (i=1kbiai)nk(\sum\limits_{i=1}^k b_i-a_i) \le n-k
根据条件 2,有下界 i=1kbiaii=1ki1=k×(k1)2\sum\limits_{i=1}^k b_i-a_i \ge \sum\limits_{i=1}^k i-1=\dfrac{k \times (k-1)}{2}
由两个不等式有 k×(k1)2nk\dfrac{k \times (k-1)}{2} \le n-k,因此 k2+k2×nk^2+k \le 2 \times n。所以 kk 很大是没有用的,因此只考虑 k50k \le 50 即可,否则无解。
再来考虑 dp,对于一组询问 (n,k)(n,k) 怎么算答案。对于条件 2 的 kk 个数对,差值可以选择 0n0 \sim n,我们要固定选择 kk 个数。
然后你在上述有解分析的时候大概想到了如果 bka1n1b_k-a_1 \le n-1,那你相当于还会剩下 n(bka1)1n-(b_k-a_1)-1 次多余的“操作”可以加到 aia_i 里去。就是说对于 a1aka_1 \sim a_k,你最多还可以把 n(bka1)1n-(b_k-a_1)-1 分配给他们。然后 bib_i 会对应的增加,是随着 aia_i 变化的,因此不需要管 bib_i
但是这个 bka1b_k-a_1 对于不同的在 nn 个差值里选择 kk 个的方案的情况下也是不同的。因此我们考虑枚举与这个相关的东西。
我们枚举选出的 kk 个数的和为 jj,其方案数记为 fj,kf_{j,k},那么可以算出你最多可以分配的量为 (n1)j(k1)=njk(n-1)-j-(k-1)=n-j-k。具体细节后面再讲。
然后你选出的 kk 个差值是可以任意调换的,因此要乘上 k!k!。然后枚举 p[0,njk]p \in [0,n-j-k] 表示你要分配 pp 个数给 kkaia_i。这个问题是经典的插板法,方案数为 (p+k1k1)\dbinom{p+k-1}{k-1},这里不再赘述。因此这部分方案数为 p=0njk(p+k1k1)\sum\limits_{p=0}^{n-j-k} \dbinom{p+k-1}{k-1}。这个东西不要暴力求,可以预处理。
然后求 ff 数组的话相当于是做一个背包,我们枚举 ii 表示当前的 nn,然后每次都 O(nk)O(nk) 做一次 01 背包。对于 n=in=i 时统计答案,枚举 kk,则 ansn=i,k=jn1fj,k×k!×p=0njk(p+k1k1)ans_{n=i,k}=\sum\limits_{j}^{n-1} f_{j,k} \times k! \times \sum\limits_{p=0}^{n-j-k} \dbinom{p+k-1}{k-1}
预处理后复杂度是 O(n2k)O(n^2k) 的,因为 k50k \le 50 才有解因此是对的。

评论

0 条评论,欢迎与作者交流。

正在加载评论...