zoukankan      html  css  js  c++  java
  • bzoj 4710: [Jsoi2011]分特产

    bzoj 4710: [Jsoi2011]分特产


    容斥,(sum_{i}(-1)^{i+1}C^{i}_{n}[ ext{把物品分给至少i个人}])

    但是(sum_{i}(-1)^{n-i}C^{i}_{n}[ ext{把物品分给最多i个人}])也是对的

    直接枚举,组合数算一下就好了

    #include<bits/stdc++.h>
    #define il inline
    #define vd void
    #define mod 1000000007
    typedef long long ll;
    il int gi(){
    	int x=0,f=1;
    	char ch=getchar();
    	while(!isdigit(ch)){
    		if(ch=='-')f=-1;
    		ch=getchar();
    	}
    	while(isdigit(ch))x=x*10+ch-'0',ch=getchar();
    	return x*f;
    }
    il int pow(int x,int y){
    	int ret=1;
    	while(y){
    		if(y&1)ret=ret*x%mod;
    		x=x*x%mod;y>>=1;
    	}
    	return ret;
    }
    int C[2001][2001],a[1001];
    int main(){
    #ifndef ONLINE_JUDGE
    	freopen("4710.in","r",stdin);
    	freopen("4710.out","w",stdout);
    #endif
    	C[0][0]=1;
    	for(int i=1;i<2001;++i){
    		C[i][0]=1;
    		for(int j=1;j<=i;++j)C[i][j]=(C[i-1][j-1]+C[i-1][j])%mod;
    	}
    	int n=gi(),m=gi();
    	for(int i=1;i<=m;++i)a[i]=gi();
    	ll ans=0,res,f=1;
    	for(int i=n;i;--i){
    		res=1;
    		for(int j=1;j<=m;++j)res=res*C[a[j]+i-1][i-1]%mod;
    		ans=(ans+res*f%mod*C[n][i]%mod)%mod;
    		f=mod-f;
    	}
    	printf("%lld
    ",ans);
    	return 0;
    }
    
  • 相关阅读:
    python排序
    python中常用的九种数据预处理方法分享
    8089汇编 源程序
    8086汇编 栈操作
    8089汇编 运算符指令
    8089汇编 标志寄存器
    8086汇编 段寄存器
    8086汇编 Debug 使用
    8086汇编 CPU 寄存结构
    8086汇编 内存交互
  • 原文地址:https://www.cnblogs.com/xzz_233/p/9739813.html
Copyright © 2011-2022 走看看