問題 j: 集合計數
時間限制: 1 sec 記憶體限制: 128 mb
題目描述
乙個有n個元素的集合有2^n個不同子集(包含空集),現在要在這2^n個集合中取出若干集合(至少乙個),使得
它們的交集的元素個數為k,求取法的方案數,答案模1000000007。(是質數喔~)
輸入 一行兩個整數n,k
輸出 一行為答案。
樣例輸入
3 2
樣例輸出
6如果固定k個元素必須選,則還剩下2^(n-k)個集合,
因此,交集》=k的方案數就是f[k]=c(n,k)*2^(2^(n-k))
很明顯我們要去重,那就要用到容斥原理了。
ans=f[k]* c(k,k)-f[k+1]* c(k+1,k)+f[k+2] *c(k+2,k)…..
也就是說當有k+1個交集時,得討論一下是哪幾個重了。
#include
#define p 1000000007
#define n 1000000
#define ll long long
int n,k;ll ans,a[n+5],b[n+5],xp[n+5];
ll cheng(ll x,ll m)
ll c(int n,int
m)void init()
int main()
組合數學 容斥 集合計數
首先我們知考慮只有一種交集 交集的大小為k,那麼有2n k個子集包含了這k個元素 確定k個元素,再從剩下n k個元素任意選取,有2n k種組合 用這2n k個子集能有2 2 n k 種組合,再減去1個空集 一共有ck n種交集,這樣得出tmp k ck n 2 2 n k 1 種方法 這裡面包含了交...
集合計數 (容斥原理)
心路 題解,其實就是,這四個集合在隨機組成的方案中,空集相當於哪個集合都沒取交集為空所以不符合。求出1,3後乘上c n,2 不就是交出來至少含k個的方案數了嗎?顯然不是,有重複的啊 比如1,3會求到交,而1,4.3,4也會 當時我就這崩了.看重複的有多少啊 對於求k個時交出來是k 1個的會算c k ...
bzoj 2839 集合計數
題意 乙個有n個元素的集合有2 n2 n 2n個不同子集 包含空集 現在要在這2 n2 n 2n個集合中取出若干集合 至少乙個 使得它們的交集的元素個數為k,求取法的方案數,答案模1000000007 題解 好題。一開始覺得應該很簡單,然而很快就證明了我很天真。設f k cn k i 12n kc2...