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. JavaScript(第二十二天)【动态加载js和css】

    学习要点: 1.元素位置 2.动态脚本 3.动态样式 本章主要讲解上一章剩余的获取位置的DOM方法.动态加载脚本和样式.   一.元素位置 上一章已经通过几组属性可以获取元素所需的位置,那么这节课补充 ...

  2. Beta 第六天

    今天遇到的困难: github服务器响应很慢 推图的API接口相应较慢,超过了初始设定的最大延迟时间,导致了无法正确返回图片 ListView滑动删除Demo出现了某些Bug,这些Bug可能导致了某些 ...

  3. Beta阶段敏捷冲刺每日报告——Day0

    下一阶段需要改进完善的功能: 搜索框在Firefox和IE中显示不正常问题 下一阶段新增的功能: ToDoList功能:针对博主的功能,在博主登录之后可以添加和修改待办事项,每个事项包括标题.内容.日 ...

  4. codevs 3342 绿色通道

    codevs 3342 绿色通道 http://codevs.cn/problem/3342/ 难度等级:黄金 题目描述 Description <思远高考绿色通道>(Green Pass ...

  5. Android类加载机制及热修复实现

    Android类加载机制 Dalvik虚拟机如同其他Java虚拟机一样,在运行程序时首先需要将对应的类加载到内存中.而在Java标准的虚拟机中,类加载可以从class文件中读取,也可以是其他形式的二进 ...

  6. nyoj 仿射密码

    仿射密码 时间限制:1000 ms | 内存限制:65535 KB 难度:1 描述 仿射密码是替换密码的另一个特例,可以看做是移位密码和乘数密码的结合.其加密变换如下: E(m)=(k1*m+k2) ...

  7. linux系统命令学习系列-用户切换命令su,sudo

    先复习一下上节内容: 用户组添加groupadd 用户组修改groupmod 用户组删除groupdel 作业创建一个id为501的组group1,然后改成group2, 同时id变为502,最后删除 ...

  8. Docker学习笔记 - Docker Compose 脚本命令

    Docker Compose 配置文件包含 version.services.networks 三大部分,最关键的是 services 和 networks 两个部分, version: '2' se ...

  9. OAuth2.0学习(1-2)OAuth2.0的一个企业级应用场景 - 新浪开放平台微博OAuth2.0认证

    http://open.weibo.com/wiki/%E9%A6%96%E9%A1%B5 开发者可以先浏览OAuth2.0的接口文档,熟悉OAuth2.0的接口及参数的含义,然后我们根据应用场景各自 ...

  10. Asp.NET Core2.0 项目实战入门视频课程_完整版

    END OR START? 看到这个标题,你开不开心,激不激动呢? 没错,.net core的入门课程已经完毕了.52ABP.School项目从11月19日,第一章视频的试录制,到今天完整版出炉,离不 ...