bzoj4710 [Jsoi2011]分特产 容斥原理
2017-08-13 23:56
393 查看
首先知道隔板法可以算出有空的方案。
那么就可以把题目转化为总方案书-不合法的方案数,容斥以后即:
至少0个人为空-至少一个人为空+至少。。。。。
那么强制不选i个盒子,算出方案数以后就是只有n-i个人有的方案。
但是并不能确定是哪i个人没被分配,所以最后乘上一个C(n,i)
那么就可以把题目转化为总方案书-不合法的方案数,容斥以后即:
至少0个人为空-至少一个人为空+至少。。。。。
那么强制不选i个盒子,算出方案数以后就是只有n-i个人有的方案。
但是并不能确定是哪i个人没被分配,所以最后乘上一个C(n,i)
#include<cstdio> #include<algorithm> #include<cstring> #define fo(i,a,b) for(int i=a;i<=b;i++) #define fd(i,a,b) for(int i=a;i>=b;i--) using namespace std; const int N=2e3+5; const int mo=1e9+7; typedef long long ll; int c ; int a ,n,m; ll ans; int main() { scanf("%d%d",&n,&m); fo(i,1,m)scanf("%d",&a[i]); fo(i,0,2000)c[i][0]=1; fo(i,1,N-5) fo(j,1,N-5)c[i][j]=(c[i-1][j]+c[i-1][j-1])%mo; int f=1; fo(i,0,n) { ll tmp=1; fo(j,1,m) tmp=tmp*c[a[j]+n-i-1][n-i-1]%mo; ans=(ans+tmp*c [i]%mo*f)%mo; f=-f; } if (ans<0)ans=(ans+mo)%mo; printf("%lld\n",ans%mo); }
相关文章推荐
- 【BZOJ 4710】 4710: [Jsoi2011]分特产 (容斥原理)
- BZOJ 4710: [Jsoi2011]分特产 [容斥原理]
- bzoj 4710: [Jsoi2011]分特产
- bzoj 4710: [Jsoi2011]分特产 (容斥原理+DP)
- Bzoj4710--Jsoi2011分特产
- bzoj 4710: [Jsoi2011]分特产 排列组合+容斥原理
- [BZOJ4710][Jsoi2011]分特产(容斥原理+组合数学)
- 【bzoj4710】[Jsoi2011]分特产 容斥原理+组合数学
- ●BZOJ 4710 [Jsoi2011]分特产
- 【JSOI2011】bzoj4710 分特产
- bzoj千题计划273:bzoj4710: [Jsoi2011]分特产
- Bzoj4710 [Jsoi2011]分特产
- [Jsoi 2011] bzoj4710 分特产 [容斥原理+组合数学]
- 【BZOJ4710】[Jsoi2011]分特产 组合数+容斥
- [BZOJ4710]4710: [Jsoi2011]分特产 容斥原理+组合数学
- 【BZOJ 4710】【JSOI 2011】分特产【计数&容斥】
- [bzoj4710][JSOI2011]分特产
- bzoj 4710 [Jsoi2011]分特产
- [BZOJ4710][JSOI2011]分特产(组合数+容斥原理)
- bzoj 4710 : [Jsoi2011]分特产