CF451E Devu and Flowers
题意:
有n个盒子,每个盒子Ai朵鲜花,相同盒子鲜花颜色相同,不同盒子颜色不同
问选m朵花有多少种方案
- n<=20,m<=1e14,s<=1e12
思路:
- 如果一个花瓶有无限个,相当于把
M+N分成N个的方案,即隔板法C(M+N-1,N-1) - 将
n个限制转化为没有限制,容斥原理- 很明显右边就是一个容斥原理
cpp
int qpow(int a,int b){
int ans=1;
for(;b;b>>=1){
if(b&1)ans=ans*a%mod;
a=a*a%mod;
}
return ans;
}
int down,A[25];
int C(int a,int b){
if(a<b)return 0ll;
int up=1;
for(int i=a;i>a-b;i--)up=i%mod*up%mod;
up=up*down%mod;
return up;
}
void solve(){
int n,m;
cin>>n>>m;
down=1;
for(int i=1;i<=n-1;i++)down=down*i%mod;
for(int i=0;i<n;i++)cin>>A[i];
down=qpow(down,mod-2);
int res=0;
for(int i=0;i<1<<n;i++){
int a=m+n-1,b=n-1;
int sign=1;
for(int j=0;j<n;j++){
if(i>>j&1){
sign*=-1;
a-=A[j]+1;
}
}
res=(res+sign*C(a,b))%mod;
}
cout<<(res+mod)%mod;
}