bzoj3028 食物 生成函数+隔板法
Posted $mathit{AlphaINF}$
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 }
以上是关于bzoj3028 食物 生成函数+隔板法的主要内容,如果未能解决你的问题,请参考以下文章