二项式反演学习笔记

有点吊

所谓反演,就是一个f和g之间的关系。假如我们知道了f,那我们就知道了g,也就是说假如我们知道了f(x)那就知道了g(x)。

二项式反演用于解决“某个物品恰好若干个”这类计数问题。

二项式反演:
f(n)=i=0n(ni)g(i)
互相转化
g(n)=i=0n(1)ni(ni)f(i)

1.我们设f(n)为<=n的方案的数量,g(n)为==n的方案的数量那么
f(n)=i=0n(ni)g(i)
g(n)=i=0n(1)ni(ni)f(i)

2.我们设f(x)为>=x的方案的数量,g(x)为==x的方案的数量,x为上界那么
f(x)=i=nx(in)g(i)
g(x)=i=nx(1)in(in)f(i)

例题:
gym king's colors
题意:
恰好k种颜色涂n个结点的树,相邻节点不能同色,问方案数。
题解

P4859:
设f(x)为>=x组,g(x)为恰好x组的方案数,那么
f(x)=i=xn(ix)g(i)
g(x)=i=xn(1)ix(ix)f(i)
所以我们处理出组合数再搞一下f(i)
问题在于如何搞g(i)
首先对于两个数组排个序,利用双指针,求出p[i]为最后一个<a[i]的b中元素的下标
那么我们就有个dp,dp[i][j]=dp[i-1][j]+dp[i-1][j-1]*(p[i]-j+1),意思是分为有i的和没i的,i加入的方案是位置减去之前已经选过的数的数量。最后dp[i][j]还要乘上其他数两两配对的方案,预处理阶乘即可。

错牌问题:
题意:求有多少种长度为n的排列使得排列元素和其下标不同。
考虑普遍情况,那么就是求有多少种长度为n的排列存在k个数使得值和其下标不同。
我们设f(x)为不同量>=x的方案数,g(x)为不同量=i的方案数,那么
f(x)=i=xn(ix)g(i)
g(x)=i=xn(1)ix(ix)f(i)
g(n)即为所求

P6478:
如果我们选定了了一个非平局状态,那么非平局时间只会提前。
所以我们设f(x)非平局回合数>=x的方案数,g(x)为非平局回合数==x的方案数
f(x)=i=nx(in)g(i)
g(x)=i=nx(1)in(in)f(i)
然后现在就是要求出非平局>=x的方案数,这个我们可以先钦定k个,其他随便放。
然后我们可以先m2搞出大小关系,然后就有个树形dp。
dpu,i为子树u内有i对的方案数。
那么我们可以转移。dpu,i有两种情况,一种是用了i一种是没用i,那么用了
我们先预处理出子树内白点和黑点数量,记为t1,t2。那么用了的情况就是树形背包容量为i,没用就是i-1然后再乘上下面的(t-i)种方案

posted @   wuhupai  阅读(17)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
· 张高兴的大模型开发实战:(一)使用 Selenium 进行网页爬虫
点击右上角即可分享
微信分享提示