23.8.4 牛客暑期多校6部分题解

B - Distance

题目大意

A ,   B A,\space B A, B 两个数列,需要选择两者的子序列进行操作,每次操作可以使任一数列的任一数加 1 1 1,两个数列不同当且仅当某个数在 A A A 数列出现的次数不等于在 B B B 数列出现的次数,问所有情况下最小操作次数和为多少(仅考虑数列长度相等时)

解题思路

考虑对于两个已经选出来的数列,可以自然而然发现最优策略一定是排序之后对应位置相互转化

先进行排序,然后考虑对于一对数 A i A_i Ai B j B_j Bj 对答案的贡献

朴素地发现会产生的影响的方案数为 ∑ p = 0 m i n ( i − 1 ,   j − 1 ) ∑ q = 0 m i n ( n − i ,   n − j ) C i − 1 p C j − 1 p C n − i q C n − j q \sum_{p=0}^{min(i-1,\space j-1)}\sum_{q=0}^{min(n-i,\space n-j)}C_{i-1}^pC_{j-1}^pC_{n-i}^qC_{n-j}^q p=0min(i1, j1)q=0min(ni, nj)Ci1pCj1pCniqCnjq

解释一下: p p p 是在枚举当前对前面选择多少数对, q q q 是在枚举后面的,组合数即选择怎么组合的方案数

组合数可以预处理,但就算这样时间复杂度也是 O ( n 4 ) O(n^4) O(n4),考虑优化

参考范德蒙德卷积公式: ∑ k = 0 m C n k C m k = ∑ k = 0 m C n k C m m − k = C n + m m \sum_{k=0}^mC_n^kC_m^k=\sum_{k=0}^mC_n^kC_m^{m-k}=C_{n+m}^m k=0mCnkCmk=k=0mCnkCmmk=Cn+mm

可以将方案数优化为 C i + j − 2 m i n ( i − 1 ,   j − 1 ) C 2 ∗ n − i − j m i n ( n − i ,   n − j ) = C i + j − 2 j − 1 C 2 ∗ n − i − j n − j C_{i+j-2}^{min(i-1,\space j-1)}C_{2*n-i-j}^{min(n-i,\space n-j)}=C_{i+j-2}^{j-1}C_{2*n-i-j}^{n-j} Ci+j2min(i1, j1)C2nijmin(ni, nj)=Ci+j2j1C2nijnj

所以最后答案就是 a b s ( A i − B i ) ∗ ∑ i = 1 n ∑ j = 1 n C i + j − 2 j − 1 C 2 ∗ n − i − j n − j abs(A_i-B_i)*\sum_{i=1}^n\sum_{j=1}^nC_{i+j-2}^{j-1}C_{2*n-i-j}^{n-j} abs(AiBi)i=1nj=1nCi+j2j1C2nijnj

no code

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值