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的更多相关文章

  1. [CEOI 2004]锯木厂选址

    Description 题库链接 从山顶上到山底下沿着一条直线种植了 \(n\) 棵老树.当地的政府决定把他们砍下来.为了不浪费任何一棵木材,树被砍倒后要运送到锯木厂. 木材只能朝山下运.山脚下有一个 ...

  2. LG4360 [CEOI2004]锯木厂选址

    题意 原题来自:CEOI 2004 从山顶上到山底下沿着一条直线种植了 n 棵老树.当地的政府决定把他们砍下来.为了不浪费任何一棵木材,树被砍倒后要运送到锯木厂. 木材只能朝山下运.山脚下有一个锯木厂 ...

  3. [总结]一些 DP 优化方法

    目录 注意本文未完结 写在前面 矩阵快速幂优化 前缀和优化 two-pointer 优化 决策单调性对一类 1D/1D DP 的优化 \(w(i,j)\) 只含 \(i\) 和 \(j\) 的项--单 ...

  4. 【BZOJ 3027】 3027: [Ceoi2004]Sweet (容斥原理+组合计数)

    3027: [Ceoi2004]Sweet Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 71  Solved: 34 Description John ...

  5. [BZOJ3027][Ceoi2004]Sweet 容斥+组合数

    3027: [Ceoi2004]Sweet Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 135  Solved: 66[Submit][Status] ...

  6. 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 ...

  7. hdu1452 Happy 2004(规律+因子和+积性函数)

    Happy 2004 题意:s为2004^x的因子和,求s%29.     (题于文末) 知识点: 素因子分解:n = p1 ^ e1 * p2 ^ e2 *..........*pn ^ en 因子 ...

  8. Sweet Alert

    http://www.dglives.com/demo/sweetalert-master/example/ Sweet Alert A beautiful replacement for Javas ...

  9. C++程序设计之四书五经[转自2004程序员杂志]--下篇

    C++程序设计之四书五经(下篇) 作者:荣耀 我在上篇中“盘点”了TCPL和D&E以及入门教程.高效和健壮编程.模板和泛型编程等方面共十几本C++好书.冬去春来,让我们继续C++书籍精彩之旅. ...

随机推荐

  1. ThreadLocal 原理和使用场景分析

    ThreadLocal 不知道大家有没有用过,但至少听说过,今天主要记录一下 ThreadLocal 的原理和使用场景. 使用场景 直接定位到 ThreadLocal 的源码,可以看到源码注释中有很清 ...

  2. 敏捷冲刺每日报告二(Java-Team)

    第二天报告(10.26  周四) 团队:Java-Team 成员: 章辉宇(284) 吴政楠(286) 陈阳(PM:288) 韩华颂(142) 胡志权(143) github地址:https://gi ...

  3. Bate敏捷冲刺每日报告--day3

    1 团队介绍 团队组成: PM:齐爽爽(258) 小组成员:马帅(248),何健(267),蔡凯峰(285)  Git链接:https://github.com/WHUSE2017/C-team 2 ...

  4. Exception in thread "main" expected '<document start>', but found BlockMappingStart in 'reader', line 23, column 2: nimbus.host: "master"

    平台:centos-6.3-i386 jdk-7u51 storm 0.9.1 python 2.6.6   hadoop 1.2.1 启动storm的时候,遇到这个问题,百度之后,看到大家的解决方案 ...

  5. Beta集合

    Beta冲刺day1 Beta冲刺day2 Beta冲刺day3 Beta冲刺day4 Beta冲刺day5 Beta冲刺day6 Beta冲刺day7 测试总结 总结合集 Beta预备

  6. Beta冲刺Day5

    项目进展 李明皇 今天解决的进度 服务器端还未完善,所以无法进行联动调试.对页面样式和逻辑进行优化 明天安排 前后端联动调试 林翔 今天解决的进度 完成维护登录态,实现图片上传,微信开发工具上传图片不 ...

  7. Hyper-V虚拟机故障导致数据文件丢失的数据恢复全过程

    简介: 由于MD3200存储中虚拟机的数据文件丢失,导致整个Hyper-V服务瘫痪,虚拟机无法使用,故障环境为Windows Server 2012服务器,系统中部署了Hyper-V虚拟机环境,虚拟机 ...

  8. python之路--day15--常用模块之logging模块

    常用模块 1 logging模块 日志级别:Noset (不设置) Debug---(调试信息)----也可用10表示 Info--(消息信息)----也可用20表示 Warning---(警告信息) ...

  9. GIT入门笔记(11)- 多种撤销修改场景和对策--实战练习

    1.检查发现目前没有变化$ git statusOn branch masternothing to commit, working tree clean $ cat lsq.txt2222 2.修改 ...

  10. java实现两个int数交换

    普通方法,进阶方法,大神方法 @Test public void test3(){ int m = 5; int n = 12; //要求m和n交换位置 System.out.println(&quo ...