zoukankan      html  css  js  c++  java
  • 【BZOJ4710】[JSOI2011]分特产(容斥)

    【BZOJ4710】分特产(容斥)

    题面

    BZOJ

    题解

    比较简单吧。。。
    (f[i])表示至多有(i)个人拿到东西的方案数。
    (f[i]=prod_{j=1}^m C_{m+i-1}^{i-1})
    现在要算的是恰好有(n)个人拿到东西的方案数。
    (ans=sum_{i=1}^n (-1)^{n-i}C_n^if[i])
    没了。。。

    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    #include<vector>
    using namespace std;
    #define ll long long
    #define MAX 1010
    #define MOD 1000000007
    inline int read()
    {
    	int x=0;bool t=false;char ch=getchar();
    	while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
    	if(ch=='-')t=true,ch=getchar();
    	while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();
    	return t?-x:x;
    }
    int f[MAX],n,m,ans;
    int jc[MAX<<1],jv[MAX<<1],inv[MAX<<1];
    int C(int n,int m){return 1ll*jc[n]*jv[m]%MOD*jv[n-m]%MOD;}
    int main()
    {
    	jc[0]=jv[0]=inv[0]=inv[1]=1;
    	for(int i=1;i<MAX<<1;++i)jc[i]=1ll*jc[i-1]*i%MOD;
    	for(int i=2;i<MAX<<1;++i)inv[i]=1ll*inv[MOD%i]*(MOD-MOD/i)%MOD;
    	for(int i=1;i<MAX<<1;++i)jv[i]=1ll*jv[i-1]*inv[i]%MOD;
    	n=read();m=read();
    	for(int i=1;i<=n;++i)f[i]=1;
    	for(int i=1;i<=m;++i)
    		for(int j=1,x=read();j<=n;++j)
    			f[j]=1ll*f[j]*C(j+x-1,j-1)%MOD;
    	for(int i=n,d=1;i;--i,d=MOD-d)ans=(ans+1ll*d*f[i]%MOD*C(n,i)%MOD)%MOD;
    	printf("%d
    ",ans);
    	return 0;
    }
    
    
  • 相关阅读:
    go-micro registry 服务的注册和发现
    Element UI
    VUE常用插件和依赖的安装!
    Element dialog实现拖拽功能
    JAVA
    修改windows的host文件
    Vue
    Vue
    Vue
    Vue
  • 原文地址:https://www.cnblogs.com/cjyyb/p/9505806.html
Copyright © 2011-2022 走看看