[CEOI 2004]Sweet
Description
有 \(n\) 种糖果。第 \(i\) 种糖果有 \(m_i\) 个。取出一些糖果,至少 \(a\) 个,但不超过 \(b\) 个。求方案数。
\(1\leq n\leq 10 , 0\leq a\leq b\leq 10000000 , 0\leq m_i\leq 1000000\)
Solution
先考虑没有下界和上界的情况。
对于第 \(i\) 种糖果,我们写出形式幂级数 \(\sum\limits_{j=0}^{m_i}x^j\) 。
那么式子 \(\prod\limits_{i=1}^n\sum\limits_{j=0}^{m_i}x^j\) 中系数和就是答案。
由于 \(\sum\limits_{i=0}^nx^i\cdot(1-x)=1-x^{n+1}\) ,故原式可化为 \(\prod\limits_{i=1}^n\frac{1-x^{m_i+1}}{1-x}=\frac{\prod\limits_{i=1}^n1-x^{m_i+1}}{(1-x)^n}\)。
由生成函数的公式,原式可化为 \(\left(\prod\limits_{i=1}^n1-x^{m_i+1}\right)\cdot\left(\sum\limits_{i=0}^{\infty}C_{i+n-1}^{n-1}x^i\right)\) 。
现在设 \(f_i\) 表示最多选 \(i\) 个糖的方案数。 \(f_i\) 就是上述式子中的 \([0,i]\) 次项式的系数和。
由于 \(n\) 比较小,我们可以将前一部分的式子暴力拆解。用 \(2^n\) 的深搜实现。
对于搜出来的某一个次数 \(p\) ,那么对于 \(f_i\) ,后面部分有贡献的只有 \(\sum\limits_{j=0}^{i-p}C_{j+n-1}^{n-1}x^j\) 。由于 \(C_n^n=1,C_n^{n-1}+C_n^n=C_{n+1}^n\) 得后一部分的式子可以直接化简为 \(C_{i+n-p}^{n}\) 。
则原题就是求 \(f_b-f_{a-1}\) 。
Code
//It is made by Awson on 2018.2.16
#include <bits/stdc++.h>
#define LL long long
#define dob complex<double>
#define Abs(a) ((a) < 0 ? (-(a)) : (a))
#define Max(a, b) ((a) > (b) ? (a) : (b))
#define Min(a, b) ((a) < (b) ? (a) : (b))
#define Swap(a, b) ((a) ^= (b), (b) ^= (a), (a) ^= (b))
#define writeln(x) (write(x), putchar('\n'))
#define lowbit(x) ((x)&(-(x)))
using namespace std;
const int MOD = 2004;
void read(int &x) {
char ch; bool flag = 0;
for (ch = getchar(); !isdigit(ch) && ((flag |= (ch == '-')) || 1); ch = getchar());
for (x = 0; isdigit(ch); x = (x<<1)+(x<<3)+ch-48, ch = getchar());
x *= 1-2*flag;
}
void print(int x) {if (x > 9) print(x/10); putchar(x%10+48); }
void write(int x) {if (x < 0) putchar('-'); print(Abs(x)); }
int n, a, b, m[15], ans, I;
int C(int n, int m) {
if (n < m) return 0;
LL x = 1;
for (int i = 1; i <= m; i++) x *= i;
LL mod = x*MOD, ans = 1;
for (int i = n-m+1; i <= n; i++) ans = ans*i%mod;
return int(ans/x)%MOD;
}
void dfs(int cen, int cnt, int sum) {
if (cen > n) {
if (cnt&1) ans -= C(I+n-sum, n);
else ans += C(I+n-sum, n);
return;
}
dfs(cen+1, cnt, sum);
dfs(cen+1, cnt+1, sum+m[cen]);
}
int f(int x) {
if (x < 0) return 0; I = x;
ans = 0; dfs(1, 0, 0);
return ans%MOD;
}
void work() {
read(n); read(a); read(b);
for (int i = 1; i <= n; i++) read(m[i]), ++m[i];
writeln(((f(b)-f(a-1))%MOD+MOD)%MOD);
}
int main() {
work(); return 0;
}
[CEOI 2004]Sweet的更多相关文章
- [CEOI 2004]锯木厂选址
Description 题库链接 从山顶上到山底下沿着一条直线种植了 \(n\) 棵老树.当地的政府决定把他们砍下来.为了不浪费任何一棵木材,树被砍倒后要运送到锯木厂. 木材只能朝山下运.山脚下有一个 ...
- LG4360 [CEOI2004]锯木厂选址
题意 原题来自:CEOI 2004 从山顶上到山底下沿着一条直线种植了 n 棵老树.当地的政府决定把他们砍下来.为了不浪费任何一棵木材,树被砍倒后要运送到锯木厂. 木材只能朝山下运.山脚下有一个锯木厂 ...
- [总结]一些 DP 优化方法
目录 注意本文未完结 写在前面 矩阵快速幂优化 前缀和优化 two-pointer 优化 决策单调性对一类 1D/1D DP 的优化 \(w(i,j)\) 只含 \(i\) 和 \(j\) 的项--单 ...
- 【BZOJ 3027】 3027: [Ceoi2004]Sweet (容斥原理+组合计数)
3027: [Ceoi2004]Sweet Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 71 Solved: 34 Description John ...
- [BZOJ3027][Ceoi2004]Sweet 容斥+组合数
3027: [Ceoi2004]Sweet Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 135 Solved: 66[Submit][Status] ...
- BZOJ3027 - [CEOI2004]Sweet
Portal Description 给出\(n(n\leq10),a,b(a,b\leq10^7)\)与\(\{c_n\}(c_i\leq10^6)\),求使得\(\sum_{i=1}^n x_i ...
- hdu1452 Happy 2004(规律+因子和+积性函数)
Happy 2004 题意:s为2004^x的因子和,求s%29. (题于文末) 知识点: 素因子分解:n = p1 ^ e1 * p2 ^ e2 *..........*pn ^ en 因子 ...
- Sweet Alert
http://www.dglives.com/demo/sweetalert-master/example/ Sweet Alert A beautiful replacement for Javas ...
- C++程序设计之四书五经[转自2004程序员杂志]--下篇
C++程序设计之四书五经(下篇) 作者:荣耀 我在上篇中“盘点”了TCPL和D&E以及入门教程.高效和健壮编程.模板和泛型编程等方面共十几本C++好书.冬去春来,让我们继续C++书籍精彩之旅. ...
随机推荐
- JavaScript(第二十四天)【事件对象】
JavaScript事件的一个重要方面是它们拥有一些相对一致的特点,可以给你的开发提供更多的强大功能.最方便和强大的就是事件对象,他们可以帮你处理鼠标事件和键盘敲击方面的情况,此外还可以修改一般事件的 ...
- Git简单图文教程
环境: Windows [版本 10.0.15063]64位 Git-2.14.1 64位[下载] TortoiseGit-2.5.0.0 64位[下载],这是一个Git 客户端,外号"乌龟 ...
- Alpha冲刺No.6
站立式会议 继续页面设计 在安卓内构件数据库相应类 解决摄像头.照片的使用的异常问题 二.实际项目进展 页面设计完成百分80 类架构完成 在虚拟机中,能够完成摄像头的调用和程序的使用 三.燃尽图 四. ...
- xcode7,ios9 部分兼容设置
神奇的苹果公司,再一次让程序员中枪. 一.xcode7 新建的项目,Foundation下默认所有http请求都被改为https请求. HTTP+SSL/TLS+TCP = HTTPS 也就是说,服务 ...
- 关于APIcloud对应C#的 wcf框架作为后台,实现多库功能
首先,我是使用ajax原来的请求方式,并没有使用apicloud中封装的请求方式. 前端代码: function makeRequest() { //alert("inside makeRe ...
- app测试中遇到问题总结
工作总结: 1 这两天由于工作,需要进行抓包,使用了Charles,fidder,发现一个坑点: charles没有抓到返回值的时候,默认是不在列表显示请求信息的,能不能设置,我就不知道了,但是可以在 ...
- Python内置函数(39)——help
英文文档: help([object]) Invoke the built-in help system. (This function is intended for interactive use ...
- GIT入门笔记(12)- 删除文件、提交删除和恢复删除
在Git中,删除也是一个修改操作,我们实战一下, 1.先添加add一个新文件test.txt到Git并且提交commit到本地版本库: $ git add test.txt$ git commit - ...
- MySql入门(2-1)windows下安装mysql的两种方式
一.下载mysql 1.下载解压MySQL 登录oracle主页,需要用户名和口令: lshengqi@netease.com/1wsx**** 下载路径:: https://dev.mysql.co ...
- Oracle 用户创建及权限设置
1:创建临时表空间create temporary tablespace user_temp tempfile 'D:\app\Administrator\oradata\ORACLE\xyrj_t ...