【BZOJ4710】[Jsoi2011]分特产

Description

JYY 带队参加了若干场ACM/ICPC 比赛,带回了许多土特产,要分给实验室的同学们。
JYY 想知道,把这些特产分给N 个同学,一共有多少种不同的分法?当然,JYY 不希望任何一个同学因为没有拿到特产而感到失落,所以每个同学都必须至少分得一个特产。
例如,JYY 带来了2 袋麻花和1 袋包子,分给A 和B 两位同学,那么共有4 种不同的分配方法:
A:麻花,B:麻花、包子
A:麻花、麻花,B:包子
A:包子,B:麻花、麻花
A:麻花、包子,B:麻花

Input

输入数据第一行是同学的数量N 和特产的数量M。
第二行包含M 个整数,表示每一种特产的数量。
N, M 不超过1000,每一种特产的数量不超过1000

Output

输出一行,不同分配方案的总数。由于输出结果可能非常巨大,你只需要输出最终结果MOD 1,000,000,007 的数值就可以了。

Sample Input

5 4
1 3 3 5

Sample Output

384835

题解:组合数还是不够熟练啊~

显然要容斥,设f[i]表示将所有物品都只分给i个人(不一定全都分到)的方案数,那么分开考虑每个物品,如果物品j的数量为v,那么方案数等价于将v个物品分成i个子集的方案数,即f[i]*=C(v+i-1,i-1)。

求出了f数组,考虑容斥,ans=至少0人未分到-至少1人未分到+至少2人未分到...

于是枚举有k个人未分到,ans+=(-1)^k*C(n,k)*f[n-k]。

#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
typedef long long ll;
const ll P=1000000007;
const int maxn=1000010;
int n,m,tot;
ll ans;
ll jc[maxn],jcc[maxn],ine[maxn],f[maxn];
int v[maxn];
ll c(int a,int b)
{
return jc[a]*jcc[b]%P*jcc[a-b]%P;
}
ll pm(ll x,ll y)
{
ll z=1;
while(y)
{
if(y&1) z=z*x%P;
x=x*x%P,y>>=1;
}
return z;
}
int main()
{
scanf("%d%d",&n,&m);
int i,j;
for(i=1;i<=m;i++) scanf("%d",&v[i]),tot+=v[i];
if(n>tot)
{
printf("0");
return 0;
}
ine[1]=ine[0]=jc[1]=jc[0]=jcc[1]=jcc[0]=1;
for(i=2;i<=tot;i++) ine[i]=(P-(P/i)*ine[P%i])%P,jc[i]=jc[i-1]*i%P,jcc[i]=jcc[i-1]*ine[i]%P;
for(i=1;i<=n;i++) f[i]=1;
for(i=1;i<=m;i++) for(j=1;j<=n;j++) f[j]=f[j]*c(v[i]+j-1,j-1)%P;
for(i=0;i<n;i++) ans=(ans+((i&1)?-1:1)*c(n,i)%P*f[n-i]%P+P)%P;
printf("%lld\n",ans%P);
return 0;
}//2 2 1 2

最新文章

  1. 统一的Json组件和csv下载组件
  2. *HDU3367 最小生成树
  3. jquery实现自动滚屏效果,适用用公告新闻等滚屏
  4. 跟随标准与Webkit源码探究DOM -- 获取元素之getElementsByClassName
  5. Scrum 项目7.0--软件工程
  6. ASP.NET Web API通过ActionFilter来实现缓存
  7. 把Java对象转为xml格式
  8. hashCode()和equals()的用法
  9. gzcompress, gzencode, gzdeflate三个压缩函数的对比
  10. bootstrap你让前端小狮子们又喜又恨
  11. ASP.NET 5 (vNext)
  12. Application_Start和Application_End事件执行时间
  13. classmethod作用
  14. [软工课程博客] 求解第N个素数
  15. CSS技巧:逐帧动画抖动解决方案
  16. gzip是一种数据格式,deflate是一种压缩算法
  17. 再也不怕aop的原理了
  18. 在Windows Server 2008 R2(x64)上安装.NET Framework 4.5 兼谈.NET Framework 4.0 “在服务器核心角色上不受支持”含义
  19. &lt;c:out /&gt;的理解
  20. myeclipse工程重名后怎么更改deploy location?

热门文章

  1. 稀疏编码(Sparse Coding)的前世今生(一) 转自http://blog.csdn.net/marvin521/article/details/8980853
  2. L1-8 外星人的一天
  3. Hrbust 2363 Symmys (Manacher + DP)
  4. linux挂载新磁盘、分区和开机自动挂载
  5. 站点部署,IIS配置优化指南
  6. Hadoop OutputFormat浅析
  7. Codeforces Round #324 (Div. 2) Olesya and Rodion 构造
  8. luogu P1854 花店橱窗布置
  9. Spark HA模式访问Hadoop HA下的数据
  10. python 工具 字符串转numpy浮点数组