博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bzoj千题计划273:bzoj4710: [Jsoi2011]分特产
阅读量:6125 次
发布时间:2019-06-21

本文共 1023 字,大约阅读时间需要 3 分钟。

 

答案=总方案数-不合法方案数

f[i][j] 前i种特产分给j个人(可能有人没有分到特产)的总方案数

考虑第i种特产的分配f[i][j]=f[i-1][j]*C(a[i]+j-1 , j-1)

g[i] 表示有i个人,每个人至少分到一种特产,其他人都没有分到的方案数

g[i]=f[m][i]-Σg[j]*C(i,j)   j∈[1,i-1]

即有i个人分到特产=总方案数-只有1个人分到特产-只有2个人分到特产……-只有i-1个人分到特产

 

#include
#include
#define N 1001using namespace std;const int mod=1e9+7;int f[N][N],g[N];int a[N];int C[N<<1][N<<1];void read(int &x){ x=0; char c=getchar(); while(!isdigit(c)) c=getchar(); while(isdigit(c)) { x=x*10+c-'0'; c=getchar(); }}int main(){ int n,m; read(n); read(m); for(int i=1;i<=m;++i) read(a[i]); C[0][0]=1; int mm=1000+n; for(int i=1;i<=mm;++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; } for(int i=1;i<=n;++i) f[0][i]=1; for(int i=1;i<=m;++i) for(int j=1;j<=n;++j) f[i][j]=1LL*f[i-1][j]*C[a[i]+j-1][j-1]%mod; for(int i=1;i<=n;++i) { g[i]=f[m][i]; for(int j=1;j

 

转载于:https://www.cnblogs.com/TheRoadToTheGold/p/8545542.html

你可能感兴趣的文章
讲讲吸顶效果与react-sticky
查看>>
c++面向对象的一些问题1 0
查看>>
直播视频流技术名词
查看>>
网易跟贴这么火,背后的某个力量不可忽视
查看>>
企业级java springboot b2bc商城系统开源源码二次开发-hystrix参数详解(八)
查看>>
java B2B2C 多租户电子商城系统- 整合企业架构的技术点
查看>>
IOC —— AOP
查看>>
比特币现金将出新招,推动比特币现金使用
查看>>
数据库的这些性能优化,你做了吗?
查看>>
某大型网站迁移总结(完结)
查看>>
mysql的innodb中事务日志(redo log)ib_logfile
查看>>
部署SSL证书后,网页内容造成页面错误提示的处理办法
查看>>
MS SQLSERVER通用存储过程分页
查看>>
60.使用Azure AI 自定义视觉服务实现物品识别Demo
查看>>
Oracle 冷备份
查看>>
jq漂亮实用的select,select选中后,显示对应内容
查看>>
C 函数sscanf()的用法
查看>>
python模块之hashlib: md5和sha算法
查看>>
linux系统安装的引导镜像制作流程分享
查看>>
解决ros建***能登录不能访问内网远程桌面的问题
查看>>