首页 > 代码库 > 【BZOJ 3028】 3028: 食物 (生成函数)
【BZOJ 3028】 3028: 食物 (生成函数)
3028: 食物
Time Limit: 3 Sec Memory Limit: 128 MB
Submit: 569 Solved: 382Description
明明这次又要出去旅游了,和上次不同的是,他这次要去宇宙探险!我们暂且不讨论他有多么NC,他又幻想了他应该带一些什么东西。理所当然的,你当然要帮他计算携带N件物品的方案数。他这次又准备带一些受欢迎的食物,如:蜜桃多啦,鸡块啦,承德汉堡等等当然,他又有一些稀奇古怪的限制:每种食物的限制如下:承德汉堡:偶数个可乐:0个或1个鸡腿:0个,1个或2个蜜桃多:奇数个鸡块:4的倍数个包子:0个,1个,2个或3个土豆片炒肉:不超过一个。面包:3的倍数个注意,这里我们懒得考虑明明对于带的食物该怎么搭配着吃,也认为每种食物都是以‘个’为单位(反正是幻想嘛),只要总数加起来是N就算一种方案。因此,对于给出的N,你需要计算出方案数,并对10007取模。Input
输入样例11输出样例11输入样例25输出样例235数据范围对于40%的数据,1<=N<=100000;对于所有数据,1<=n<=10^500;Output
Sample Input
Sample Output
HINT
Source
【分析】
这题目测是可以乱搞的?
然后还是生成函数比较符合一般性啦。
$(1+x^2+x^4+...)*(1+x)*(1+x+x^2)*(x+x^3+x^5+...)*(1+x^4+x^8+...)*(1+x+x^2+x^3)*(1+x)*(1+x^3+x^6+...)$
然后等比数列求和 ($x^{inf}=0$)
View Code
$=\dfrac{1?x^2}{1?x}*\dfrac{1?x^2}{1?x}*\dfrac{1?x^3}{1?x}*\dfrac{1?x^4}{1?x}*\dfrac{1}{1?x^2}*\dfrac{x}{1?x^2}*\dfrac{1}{1?x^4}*\dfrac{1}{1?x^3} $
$=\dfrac{x}{(1?x)^{4}}$
【打得有点辛苦
然后$G(x)=\dfrac{1}{(1-x)^m}=(1+x+x^2+x^3+...)^m$的x^n的系数是,把n分成m分可空的。即$C_{n+m-1}^{m-1}$
然后乘一个x,就是第n-1项的系数即为答案,即$C_{n-1+4-1}^{4-1}=C_{n+2}^{3}=\dfrac{n*(n+1)*(n+2)}{6}$
%%%http://blog.csdn.net/clove_unique/article/details/70748541
【生成函数做这道题感觉很优越啊。。
1 #include<cstdio> 2 #include<cstdlib> 3 #include<cstring> 4 #include<iostream> 5 #include<algorithm> 6 using namespace std; 7 #define Mod 10007 8 #define LL long long 9 10 char s[510]; 11 12 int main() 13 { 14 scanf("%s",s); 15 int l=strlen(s),n=0; 16 for(int i=0;i<l;i++) 17 { 18 n=n*10+s[i]-‘0‘; 19 n%=Mod; 20 } 21 n=1LL*n*(n+1)*(n+2)/6%Mod; 22 printf("%d\n",n); 23 return 0; 24 }
2017-04-25 22:12:06
【BZOJ 3028】 3028: 食物 (生成函数)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。