【bzoj3028】 食物 生成函数+隔板法

题目传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=3028

这题的推导很妙啊,裸的推母函数的题。

我们首先构造出每种食物的母函数:

汉堡:$1+x^2+x^4+……=\frac{1}{1-x^2}$

可乐:$1+x=\frac{1-x^2}{1-x}$

鸡腿:$1+x+x^2=\frac{1-x^3}{1-x}$

蜜桃:$x+x^3+x^5+......=\frac{x}{1-x^2}$

鸡块:$1+x^4+x^8+......=\frac{1}{1-x^4}$

包子:$1+x+x^2+x^3=\frac{1-x^4}{1-x}$

炒肉:$1+x=\frac{1-x^2}{1-x}$

面包:$1+x^3+x^6+......=\frac{1}{1-x^3}$

然后,我们将这八个母函数乘起来,得到$\frac{x}{(1-x)^4}$,所求答案为$\frac{x}{(1-x)^4}$的n次项系数。

考虑如何求这个东西,不难发现,$\frac{x}{(1-x)^4}=x \times (\frac{1}{1-x})^4$,然后又因为$\frac{1}{1-x}=\sum_{i=0}{\infty} x^i$,可以想象成有一个物品集合A,其中每种权值恰好有1个,那么$\frac{x}{(1-x)^4}$的n次项系数相当于从4个A集合中各取出1个,并且这4个物品的权值和为n的方案数,这个东西通过插板法简单推导下可以推出其答案为$\binom{n+2}{3}$。

由于n很大,读入的时候先取个模再求答案即可。

代码很短,推导稍长....

 1 #include<bits/stdc++.h>
 2 #define MOD 10007
 3 #define INV6 1668
 4 using namespace std;
 5 char c[12345]={0};
 6
 7 int main(){
 8     scanf("%s",c);
 9     int len=strlen(c),n=0;
10     for(int i=0;i<len;i++) n=(n*10+c[i]-‘0‘)%MOD;
11     printf("%d\n",n*(n+1)%MOD*(n+2)%MOD*INV6%MOD);
12 }    

原文地址:https://www.cnblogs.com/xiefengze1/p/9021754.html

时间: 2024-12-14 22:36:01

【bzoj3028】 食物 生成函数+隔板法的相关文章

BZOJ 3028: 食物 [生成函数 隔板法 | 广义二项式定理]

3028: 食物 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 497  Solved: 331[Submit][Status][Discuss] Description 明明这次又要出去旅游了,和上次不同的是,他这次要去宇宙探险! 我们暂且不讨论他有多么NC,他又幻想了他应该带一些什么东西.理所当然的,你当然要帮他计算携带N件物品的方案数. 他这次又准备带一些受欢迎的食物,如:蜜桃多啦,鸡块啦,承德汉堡等等 当然,他又有一些稀奇古怪的限制: 每种

无标号树的计数原理(组合计数,背包问题,隔板法,树的重心)

闲话 一个计数问题入门级选手来搞这种东西 最初的动力来自高一化学课有机物(滑稽).<同步导练>出了个这样的选择题. 一个结构极其庞大的烷烃(二十几个碳原子),求它的主链长度. 这不是个求树的直径的裸题么?!OI选手扫两眼就出来了,然而别的同学费劲心思找完了还是错的. 于是第一次在常规课中体验到作为OIer的优越感...... 又是一节课,芙蓉姐开始要我们画己烷.庚烷的同分异构体?! 这不是等于要求节点数为\(n\),点度数不超过\(4\)的无标号的无根树个数吗?没见过,但还是有一点DP思想,蒟

10943 - How do you add?(隔板法)

这个问题可以简化成在把N个球放在K个箱子里的方法个数,由于每个箱子可以是空的,所以我们不妨多加K个球,这样就可以至少保证一个箱子有一个球,之后用隔板法对N + K 个球进行分割,也就是在N + K - 1 个空位中选择K - 1位置 C(N + K - 1,K - 1) 求解方法递推就可以了. 另外: 排列数 A(m,n)=m(m-1)(m-2)--(m-n+1)= m!/(m-n)! 而组合数 C(m,n)=A(m,n)/n! C(m,0) = 1; 0! = 1; 代码: #include<

uva10943(隔板法)

很裸的隔板法. 引用一下维基上对隔板法的解释: 现在有10个球,要放进3个盒子里 ●●●●●●●●●● 隔2个板子,把10个球被隔开成3个部份 ●|●|●●●●●●●●.●|●●|●●●●●●●.●|●●●|●●●●●●.●|●●●●|●●●●●.●|●●●●●|●●●●.●|●●●●●●|●●●....... 如此类推,10个球放进3个盒子的方法总数为 n个球放进k个盒子的方法总数为 问题等价于求的可行解数,其中为正整数. **如果允许有空盒子**: 现在有10个球,要放进3个盒子里,并允许空

组队赛第五场 组合隔板法+最小生成树预处理并查集

UVALive 6434 题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=4445 这题正好就是大一小学期的时候好像是曦曦出的那个牛那题吧,就是要买多少块板然后正好把牛给拦完.这题也是一样,就是找最大的距离,当做隔板,依次把最大的距离去掉,最后的就是最小的了. #include<iostream> #in

51Nod 1509 加长棒(隔板法)

http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1509 思路: 直接去解可行的方法有点麻烦,所以应该用总的方法去减去不可行的方法,有点像容斥原理. 将加长棒分成4个部分,允许为0,其中一部分表示剩余.这个就是经典的隔板法了. 这是百度百科上的一个例子,看完之后应该就理解隔板法的做法了吧. 这道题目也就是要将L分成4部分,允许为空,所以先L+4,表示每个部分至少为1,所以总共有L+4-1的空隙可以插板,我们需要插3个板,

UVA10943- How do you add?(隔板法)

题目链接 题意:求由K个不大于N的非负整数组合而成N的方法数. 思路:隔板法.这个问题可以等价于有N个小球放入K个盒子中,盒子可以为空,问有几种放置的方法.但因为盒子为空,不符合隔板法,所以我们可以先往每个盒子里面放置一个小球,满足每个盒子都不为空的,等分完后,在每个盒子减去一个小球.所以就相当与将N + K - 1个小球分为K - 1份.之后就是组合数学的问题了. 代码: #include <iostream> #include <cstdio> #include <cst

组合计数中的隔板法 HDU 1410 PK武林盟主

在排列组合中,对于将不可分辨的球装入到可以分辨的盒子中而求装入方法数的问题,常用隔板法.隔板法在排列组合中的应用技巧 例1.求方程的正整数解的个数. [分析] 将10个球排成一排,球与球之间形成9个空隙,将两个隔板插入这些空隙中(每空至多插一块隔板),规定由隔板分成的左.中.右三部分的球数分别为x.y.z之值(如下图).则隔法与解的个数之间建立了一一对立关系,故解的个数为(个).实际运用隔板法解题时,在确定球数.如何插隔板等问题上形成了一些技巧.下面举例说明. 技巧一:添加球数用隔板法. 例2.

“隔板法”详解

理解隔板法 隔板法就是在n个元素间的(n-1)个空插入k-1个板子,把n个元素分成k组的方法. 应用隔板法必须满足的3个条件: n个元素是相同的 k个组是互异的 每组至少分得一个元素 公式 将n个相同的求放到m个不同的盒子里的个数为:$C_{n-1}^{m-1}$ 例如, 原文地址:https://www.cnblogs.com/lfri/p/10439510.html