P4463 [国家集训队] calc

博客介绍了计算长度为i的答案的方法,通过序列中相同元素的个数进行容斥,给出了f(i)的计算公式。解释了公式中各项的含义,说明是为避免多算相同方案而进行容斥。因N<=500,预处理s(i)和C后可暴力计算。

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

我们令f(i)为长度为i的答案

然后我们用序列中相同元素的个数来容斥:

f(i)=s(1)f(n-1)-C(n-1,1)*s(2)*f(n-2)+C(n-1,2)*s(3)*f(n-3)-.........

其中s(m)表示sigma(1,A):im

为什么可以这样写:

C(n-m,2)s(m)其实可以表示随意选m个位置,然后随意选择数对答案的贡献。

我们先算序列中全部互相不同的个数,如果我们用s(1)f(n-1)计算,则多算了序列中有i+1个相同的方案。

容斥掉就是这个式子了。

因为N<=500,所以预处理s(i),C之后暴力计算就好了

转载于:https://www.cnblogs.com/thedreammaker/p/11160829.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值