bzoj 4710: [Jsoi2011]分特产

来源:互联网 发布:php商城哪个好 编辑:程序博客网 时间:2024/06/02 12:06

题意:

将m种不同特产分给n个人,每种物品a[i]个,每个人多要有至少一个特产。问方案数。

题解:

傻逼题。
假如可以有人没有,那么就是ΠniCn1n+a[i]1
然后容斥减不合法的就没有了。
code:

#include<cstdio>#include<cstdlib>#include<cstring>#include<iostream>#define LL long long using namespace std;const LL mod=1000000007;LL C[2010][2010],n,m,a[1010];void pre(){    for(LL i=0;i<=2000;i++)    {        C[i][0]=1;        for(LL j=1;j<=i;j++) C[i][j]=(C[i-1][j]+C[i-1][j-1])%mod;    }}LL solve(LL x){    LL ans=1;    for(LL i=1;i<=m;i++)        ans=ans*C[x+a[i]-1][x-1]%mod;    return ans;}int main(){    pre();    scanf("%lld %lld",&n,&m);    for(LL i=1;i<=m;i++) scanf("%lld",&a[i]);    LL ans=0;    for(LL i=1;i<=n;i++)    {        LL tmp=solve(i);        if((i&1)==(n&1)) ans=(ans+tmp*C[n][i]%mod)%mod;        else ans=(ans-tmp*C[n][i]%mod)%mod;        (ans+=mod)%=mod;    }    printf("%lld",ans);}
原创粉丝点击