LOJ #6077. 「2017 山东一轮集训 Day7」逆序对

博客探讨了LOJ #6077题目中逆序对的计数问题,将其转化为不定方程求解的数学问题。通过容斥原理和特定的DP方法,计算在限制条件下的方案数,提出了一种复杂度为O(450*m)的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这题(BZOJ2431的加强版)厉害了。。。

考虑从小到大加入数,则i就可以让逆序对数+[0,i-1]

问题就变为了现在有一个不定方程:x1+..+xn=m,且0<=xi<=i-1

考虑用容斥,于是要计算F(i,j)表示[1,n]选i个数和为j的方案数

则最终答案为sum{(F(0,j)-F(1,j)+F(2,j)-...)*(和为m-j有n个变量的不定方程解的个数)}(j=0..m)


如何计算F(i,j)呢?一个显然的方法是类似背包的DP,不过这题目有点特殊。可以假设你现在有一个序列,你每次可以选择把序列整体+若干1,然后再添一个1,然后再+若干1。由于可能会加到大于n,把这部分减掉就好了.

这样最多只能弄大概450次,于是复杂度就是O(450*m)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值