[BZOJ4710][Jsoi2011]分特产 容斥原理

来源:互联网 发布:光翼学园网络班2016 编辑:程序博客网 时间:2024/04/28 03:55

容斥一发即可

#include <iostream>#include <cstdio>#define mod 1000000007#define N 2050using namespace std;typedef long long LL;LL C[N][N],F[N],ans;int n,m;int a[N];int main() {    scanf("%d%d",&n,&m);    for (int i=1;i<=m;i++) scanf("%d",&a[i]);    for (int i=0;i<=2000;i++) C[i][i] = C[i][0] = 1LL;    for (int i=1;i<=2000;i++)        for (int j=1;j<=i;j++) C[i][j] = C[i-1][j-1] + C[i-1][j] , C[i][j] %= mod;    for (int i=1;i<=n;i++) F[i] = 1;    for (int i=1;i<=n;i++)        for (int j=1;j<=m;j++)            F[i] *= C[a[j]+i-1][i-1] , F[i] %= mod;    for (int i=n;i>=0;i--)        ans += ((i&1) == (n&1)) ? F[i] * C[n][i] % mod : -F[i] * C[n][i] % mod , ans = (ans + mod) % mod;    printf("%d\n",(int)ans);    return 0;}
0 0
原创粉丝点击