题意

给你一个数 \(k\) ,\(n\) 个桶,有 \(m\) 个桶有容量上限 \(w_i\) ,其它桶则没有。求把数拆开放到各个桶里,最终得到序列的方案数。
数据范围 : \(n,k<=5*10^6\) , \(m,w_i<=300\) 。


做法

考虑到 \(m\) , \(w[i]\)很小,我们先假装不存在有限制的桶。
等等!这样不就是插板法裸题了吗?答案显然是\(C^{n-1}_{k+n-1}\)的呀。

我们再来考虑有限制的情况,因为数据很小,我们考虑把 \(k\) 分为两份,一份直接暴力dp算出方案数,一份用刚刚的公式计算。枚举分割点(它不会超过 \(90000\) 个),直接相加即可。

最后还要注意用前缀和优化dp转移,组合数预处理等。

做完了,复杂度 \(O(n+m^2*w_{max})\) 。


代码实现

#include<cstdio>
const long long mod=1e9+7;
long long pu[10000005],inv[10000005];
long long w[305],dp[305][90005],sum[305][90005];
long long qpow(long long val,long long k){long long ret=1;while(k){if(k&1) ret=ret*val%mod;val=val*val%mod; k>>=1;}return ret;
}
long long C(long long n,long long m){return (pu[n]*inv[m]%mod)*inv[n-m]%mod;
}
void init(int maxn){pu[0]=1;//!!!!for(int i=1;i<=maxn;i++) pu[i]=pu[i-1]*i%mod;inv[maxn]=qpow(pu[maxn],mod-2);for(int i=maxn-1;i>=0;i--) inv[i]=inv[i+1]*(i+1ll)%mod;dp[0][0]=1;return ;
}
int main(){int n,m,k;scanf("%d%d%d",&n,&m,&k);init(n+k);for(int i=1;i<=m;i++) scanf("%lld",&w[i]);int sumw=0;for(int i=1;i<=m;i++){sum[i-1][0]=dp[i-1][0];for(int j=1;j<=sumw;j++)sum[i-1][j]=(sum[i-1][j-1]+dp[i-1][j])%mod;for(int j=sumw+1;j<=sumw+w[i];j++)sum[i-1][j]=sum[i-1][j-1];sumw+=w[i];dp[i][0]=1;for(int j=1;j<=sumw;j++){if(j<=w[i]) dp[i][j]=(dp[i-1][j]+sum[i-1][j-1])%mod;else dp[i][j]=(dp[i-1][j]+(sum[i-1][j-1]-sum[i-1][j-w[i]-1]+mod)%mod)%mod;}}if(n==m){if(k>=90004)return 0*puts("0");return 0*printf("%lld\n",dp[n][k]);}long long ans=0;for(int i=0;i<=sumw;i++){if(dp[m][i]==0) continue;ans=(ans+dp[m][i]*C(k-i+(n-m)-1,(n-m)-1)%mod)%mod;}printf("%lld\n",ans);return 0;
}

转载于:https://www.cnblogs.com/JiuPleber/p/2019_3_15_T1.html

2019-3-15 模拟赛 T1相关推荐

  1. 洛谷 10月 csp-s 模拟赛 T1,T2解析及代码

    洛谷 10月 csp-s 模拟赛 T1,T2解析及代码 T1 Magenta Potion 题目描述 给定一个长为 nnn 的整数序列 aaa,其中所有数的绝对值均大于等于 222.有 qqq 次操作 ...

  2. 【2019.7.16 NOIP模拟赛 T1】洗牌(shuffle)(找环)

    找环 考虑每次洗牌其实是一次置换的过程,而这样必然就会有循环出现. 因此我们直接通过枚举找出每一个循环,询问时只要找到环上对应的位置就可以了. 貌似比我比赛时被卡成\(30\)分的倍增简单多了? 代码 ...

  3. 纪中20日c组模拟赛T1 2121. 简单游戏

    T1 2121. 简单游戏 (File IO): input:easy.in output:easy.out 时间限制: 1000 ms  空间限制: 262144 KB  具体限制 Goto Pro ...

  4. 20161023 NOIP 模拟赛 T1 解题报告

    Task 1.纸盒子 (box.pas/box.c/box.cpp) [题目描述] Mcx是一个有轻度洁癖的小朋友.有一天,当他沉溺于数学卷子难以自拔的时候,恍惚间想起在自己当初学习概率的时候准备的一 ...

  5. 20181225模拟赛 T1 color (转化思想,分拆思想)

    题目: 有⼀块有 n 段的栅栏,要求第 i 段栅栏最终被刷成颜色 ci .每⼀次可以选择 l, r 把第l . . . r 都刷成某种颜色,后刷的颜⾊会覆盖之前的.⼀共有 m 种颜色,雇主知道只需要用 ...

  6. 7.9模拟赛T1图的遍历(dfs)

    图的遍历(dfs) [题目描述] 对于一个有向图G来说,我们存在一个经典的遍历算法,就是DFS (深度优先搜索遍历).将G以1号点为起点进行DFS后,我们可以 得到G的一棵DFS遍历树T.就此,我们可 ...

  7. ztz11的noip模拟赛T1:愤怒的XiaoX

    链接: https://www.luogu.org/problemnew/show/U47231 思路: 这道题其实就是一道双Lazy线段树裸题 因为我们知道,当k一定时,取反偶数次最后k位等于不取反 ...

  8. 9.20模拟赛T1[聪明的小偷]

    聪明的小偷 (thief.pas/c/cpp) 袋,首先他会先检查每个口袋是不是都有硬币,之后他会计算出第 1 个和第 2 个口袋的硬币数量之和,第 2 个与第 3 个口袋的硬币数量和,如此直到第 n ...

  9. 【信奥题库 NOIP 2020 在线模拟赛 T1】有趣的函数

    题目 https://www.oitiku.com/simulate-contest/5/16 思路 考试的时候思考方向错了,以为是递推 我们可以枚举有多少个e,那么可以计算出来要多少个2 然后我们就 ...

最新文章

  1. 设备节点监听--走在 input 分析之前
  2. GlusterFS的安装及使用
  3. 学mysql逻辑思维跟不上_关于避免MySQL替换逻辑SQL的坑爹操作详解
  4. python matplotlab在jupyter notebook中画图不显示怎么办?(%matplotlib inline)
  5. 软件测试理论入门(一)
  6. 实例43:python
  7. esd防护_电路级ESD防护方法
  8. Cloud一分钟 | 华为云发布云数据安全白皮书;OPPO携手阿里云举行天池OGeek算法挑战赛...
  9. iOS面试中经常问的点 - RunTime
  10. 虚拟化技术简介--CPU/内存/IO/网络虚拟化介绍
  11. Ubuntu安装teamviewer
  12. java中的原型模式_java中的原型模式理解
  13. console.log()中的运算与打印事件
  14. [渝粤教育] 西南科技大学 公共关系学 在线考试复习资料
  15. python基础之错误、调试(异常处理)
  16. POJ 2752 Seek the Name, Seek the Fame (KMP)
  17. 防止撤回插件 Android,微信防撤回插件
  18. skywalking elasticsearch 版本匹配问题
  19. java类库编程_进阶Java编程(5)基础类库
  20. 如何用u盘装xp系统教程

热门文章

  1. linux tomcat java heap space_Linux下tomcat JVM内存设置
  2. 计算机故障的分析原理,蓝屏含义、原理分析、处理方法 电脑计算机故障系统安全...
  3. list 索引 java_如何在Java中保持List索引的固定
  4. 中兴存储服务器 操作系统,中兴新支点服务器操作系统:企业级的国内服务器操作系统...
  5. html任务3 模拟滚动条,vue3系列:vue3.0自定义虚拟滚动条V3Scroll|vue3模拟滚动条组件...
  6. 【ruoyi】java.util.concurrent.RejectedExecutionException: Task java.util.concurrent.ScheduledThreadPoo
  7. Request processing failed; nested exception is feign.RetryableException: Read timed out
  8. python中cgi到底是什么_什么是CGI?详细介绍Python CGI编程
  9. 手机python软件怎么创建项目_pycharm怎么创建项目
  10. Npm如何升级package.json