码迷,mamicode.com
首页 > 其他好文 > 详细

【BZOJ】3028: 食物

时间:2015-03-18 13:40:16      阅读:143      评论:0      收藏:0      [点我收藏+]

标签:

http://www.lydsy.com/JudgeOnline/problem.php?id=3028

题意:

每种食物的限制如下:
汉堡:偶数个;
可乐:0个或1个
鸡腿:0个,1个或2个
蜜桃:奇数个
鸡块:4的倍数个
包子:0个,1个,2个或3个
土豆:不超过一个。
面包:3的倍数个

问带$n$个物品的方案数(n<=10^500)

#include <bits/stdc++.h>
using namespace std;

int main() {
	int n=0; char c;
	while(cin >> c) ((n*=10)+=c-‘0‘)%=10007;
	cout << ((n*(n+1)%10007)*(n+2)%10007)*1668%10007 << endl;
	return 0;
}

  

学习了一下各种姿势= =

首先母函数易得= =

$$
\begin{align}
汉堡 & = x^0 + x^2 + x^4 + \cdots = \frac{1}{1-x^2} \\
蜜桃 & = x^1 + x^3 + x^5 + \cdots = \frac{x}{1-x^2} \\
面包 & = x^0 + x^3 + x^6 + \cdots = \frac{1}{1-x^3} \\
鸡块 & = x^0 + x^4 + x^8 + \cdots = \frac{1}{1-x^4} \\
土豆 & = x^0 + x^1 = \frac{1-x^2}{1-x} \\
可乐 & = x^0 + x^1 = \frac{1-x^2}{1-x} \\
鸡腿 & = x^0 + x^1 + x^2 = \frac{1-x^3}{1-x} \\
包子 & = x^0 + x^1 + x^2 + x^3 = \frac{1-x^4}{1-x} \\
\end{align}
$$

乘起来就是 $ f(x) = \frac{x}{(1-x)^4} $

根据泰勒展开$\sum_{i=0}^{\infty} x^i = \frac{1}{1-x}$

发现
$$ f(x) = x \left( \frac{1}{1-x} \right)^4 = x \left( \sum_{i=0}^{\infty} x^i \right)^4 $$

而$\left( \sum_{i=0}^{\infty} x^i \right)^n$中的$x$的$a$次项的系数是$\binom{a+n-1}{n-1}$

证明:

对于系数$a$,由于有$n$个多项式相乘,我们就设$a$由$n$个非负数的和。而由于有$0$的出现,我们将式子两边加上$n$,这样就能没负数啦= =。将这些数全部变成$1$的和,即$a+n = 1 + 1 + 1 + \cdots +1$,假设有$n-1$个竖线插在这$a+n$个$1$之间,即有$a+n-1$个位置,那么显然$\binom{a+n-1}{n-1}$就是答案= =(即分割成$n$份。

所以答案就是$f(x)$的$x$的$n$次系数,即$\binom{n+2}{3}$

【BZOJ】3028: 食物

标签:

原文地址:http://www.cnblogs.com/iwtwiioi/p/4346848.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!