省选模拟 幻化成风(容斥原理,状压DP)

博客探讨了如何在算法竞赛中使用容斥原理和状态压缩动态规划(DP)解决特定问题。通过有序求解并除以相同元素的阶乘来处理无序要求,接着解释了如何有效地进行集合划分容斥,并推导出容斥系数。文章指出,在满足特定限制条件(如∑ai≤30)的情况下,可以采用状压DP求解整数分拆方案,计算方案数。最后,讨论了优化技巧,如避免使用`set<pair<int, int>>`,转而使用排序和哈希值以提高效率。" 82644707,7899675,Java 背包算法解决最接近目标数问题,"['Java', '动态规划', '算法', '空间复杂度', '数值处理']
摘要由CSDN通过智能技术生成

在这里插入图片描述

首先这个 a i a_i ai相同的时候无序的要求,直接按有序求答案,然后除 a i a_i ai相同的个数的阶乘即可,因为我们的 b b b两两不同。
有序的答案要两两不同,我们考虑容斥哪些相同,可以想到的较高效容斥是枚举将 m m m个数划分为若干个集合(有 B e l l ( m ) Bell(m) Bell(m)种方案),每个集合中的数字都相等。
但是容斥系数不太好找,因为一般的集合划分容斥是不同集合间的一定(不)满足条件,而这个是集合之间的一定(不)满足条件。
考虑我们用经典容斥的观点给每个集合一个容斥系数,使得一个划分方案的容斥系数等于集合的容斥系数之积。
那么考虑一个容斥系数 f ( x ) = ∑ i = 1 f i x i i ! f(x)=\sum_{i=1} \frac {f_ix^i}{i!} f(x)=i=1i!fixi,其中 f i f_i fi i i i个点的集合的容斥系数,满足 e f ( x ) = x e^{f(x)}=x ef(x)=x
根据 e x p exp exp的组合意义,
[ n = 1 ] = [ x n ] e f ( x ) = f n + ∑ i = 1 n − 1 ( n − 1 i − 1 ) f i [ x n − i ] e f ( x ) [n=1]=[x^n]e^{f(x)}=f_n+\sum_{i=1}^{n-1} \binom{n-1}{i-1} f_i [x^{ n-i}]e^{f(x)} [n=1]=[xn]ef(x)=fn+i=1n1(i1n1

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值