題面
用來學習二項式反演的題目
大於等於/小於等於 反演出 恰好等於
設前者為f(n),後者為g(n),則有$f(n)=\sum\limits_^nc_n^ig(n)g(n)=\sum\limits_^n(-1)^ic_n^if(i)$
這裡我們$n^2$地dp求出$f(i)$表示a>b的組數大於等於i的方案數然後套二項式反演即可。設$dp[i][j]$表示前i個物品產生了j組a>b的配對的方案數,那麼$dp[i][j]=dp[i-1][j]+(lst-j+1)*dp[i-1[j-1]$,其中lst表示b中小於a_i的數的數目,最後$f(i)=dp[n][i]*(n-i)!$。
1 #include2 #include3 #include4view codeusing
namespace
std;
5const
int n=2005,mod=1e9+9;6
intn,m,ans,a[n],b[n],lst[n];
7int
f[n],g[n],fac[n],inv[n],dp[n][n];
8void add(int &x,inty)9
14int qpow(int x,int
k)15
20int c(int a,int
b)21
24void
pre()
2531
intmain()
3244
for(int i=1;i<=n;i++) g[i]=1ll*dp[n][i]*fac[n-i]%mod;
45for(int i=m;i<=n;i++)
46 add(ans,(((i-m)&1)?-1ll:1ll)*c(i,m)*g[i]%mod);
47 printf("%d"
,ans);
48return0;
49 }
bzoj 3622 已經沒有什麼好害怕的了
我好害怕這種題 兩個陣列排序後,處理出next i 表示滿足tang i yao j 的最大的j。f i j 前i種糖果,有j個糖比藥多,不考慮剩餘情況的方案數 也就是剩餘n j個糖果的放法算一種,最後乘上階乘。f i j f i 1 j f i 1 j 1 max next i j 1,0 開始忘...
BZOJ 3622 已經沒有什麼好害怕的了
這名字起的。題意 給出兩數列a,b都有n個元素,元素兩兩互不相同,問有多少種方案使得恰好 a i b j 的數目 a i b j 的數目 k?轉化 恰好有a i b j 的數目 n k 2 如果n k為奇數無解。link here 蒟蒻連普通dp也想不到啊otz 首先將糖果藥片們排序 設糖果i大於的...
BZOJ3622 已經沒有什麼好害怕的了
題意 給定兩個長度為n的互不相同的序列,將其兩兩配對,求有多少種配對使得a i b i 的對數減去其他對數恰好為k。一道經典的計數題,但思路理清後發現並不算難。首先設x為a i 小於b i 的對數。x x k n 2 x n k 所以當n k為奇數,答案為0。先令ne i 表示小於a i 的最後乙個...