问题描述
一个有N个元素的集合有2^N个不同子集(包含空集),现在要在这2^N个集合中取出若干集合(至少一个),使得它们的交集的元素个数为K,求取法的方案数,答案模1000000007。
输入格式
输入一行两个整数N,K。
输出格式
输出一个整数表示答案。
样例输入
3 2
样例输出
6
#include<stdio.h> #include<math.h> int p(int n,int k){ int f=k; for(int i=1;i<f;i++){ n=n*(n-1); k=k*(k-1); } return n/k; } void f(int n,int k){ //选取其中 K个元素,取法总数 CnK int m=p(n,k); //其余元素取或者不取的所有取法 int m1=pow(2,(n-k)); printf("%d",m*m1); } int main(){ f(3,2); return 0; }