我好害怕這種題 φ(≧ω≦*)?
兩個陣列排序後,處理出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) 開始忘記max了。因為f[i][j]不一定都是合法狀態,所以要判一下。
套容斥:
ans[j]=f[n][j]*jie[n-j]-sigma(ans[k]*c[k][j])
總結一下,容斥原理對於等於k個的可以使用上面的公式,而不是+1-1.spring我算明白了?
吐槽一下,這題樣例也太強了吧,隨便怎麼寫都能過。
#include#include
#include
#include
#include
#define md 1000000009
#define ll long long
#define inf (int) 1e9
#define eps 1e-8
#define n 2010
using namespace std;
int tang[n],yao[n],next[n];
ll f[n][n],c[n][n],jie[n];
int main()
k=(n+k)>>1;
for (int i=1;i<=n;i++) scanf("%d",&tang[i]);
for (int i=1;i<=n;i++) scanf("%d",&yao[i]);
sort(tang+1,tang+n+1); sort(yao+1,yao+n+1);
int w=1;
for (int i=1;i<=n;i++)
//for (int i=1;i<=n;i++) printf("%d ",next[i]); printf("\n%d\n",k);
f[0][0]=1;
for (int i=1;i<=n;i++)
for (int j=0;j<=n;j++)
f[i][j]=(f[i-1][j]+f[i-1][j-1]*max(next[i]-j+1,0))%md;
c[0][0]=1;
for (int i=1;i<=n;i++)
for (int j=0;j<=i;j++)
c[i][j]=(c[i-1][j]+c[i-1][j-1])%md;
jie[0]=1;
for (int i=1;i<=n;i++) jie[i]=(jie[i-1]*i)%md;
for (int i=n-1;i>=k;i--)
printf("%lld\n",f[n][k]);
return 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 的最後乙個...
BZOJ3622 已經沒有什麼好害怕的了
已經使 modoka 有簽訂契約,和自己一起戰鬥的想法後 mami 忽然感到自己不再是孤單一人了呢.於是,之前的謹慎的戰鬥作風也消失了 在對 charlotte 的傀儡使用終曲 tiro finale後 mami 面臨著即將被 charlotte 的本體吃掉的局面.這時,已經多次面對過 charlo...