HDU 2082 找单词 (母函数)

来源:互联网 发布:深圳税友软件 编辑:程序博客网 时间:2024/06/05 08:27

题目:http://acm.hdu.edu.cn/showproblem.php?pid=2082

题意:已知有26种数字(1,2,3,4......26),然后输入26个数(m1,m2,m3,....m26),分别代表每个数字的个数,求出总值不超过50的方案数。

分析:由于每种数字各选多少个互不影响。

           对于数字1,有m1个,用多项式(1+x+x^2+x^3+....+x^m1)表示选数字1的总方案,1(x^0)表示不选,x(x^1)表示选一个1,x^2表示选两个1,.......,x^m1表示选m1个1。

           对于数字2,有m2个,用多项式(1+x^2+x^4+x^6+.....+x^(2*m2))表示选数字2的总方案,1表示不选,x^2表示选一个2,x^4表示选两个2,.......,x^(2*m2)表示选m2个2。

           。。。。。。

          构造母函数如下:

          G(x)=(1+x+x^2+x^3+....+x^m1)*(1+x^2+x^4+x^6+.....+x^(2*m2))......(1+x^26+x^52+....+x^(26*m26))

         展开后如下:

         G(x)=1+(p1)x+(p2)x^2+(p3)x^3+........

         x指数幂代表总值,x的系数代表其方案数。

代码:

#include  <iostream>#include <cstdio>#include <cstring>using namespace std;int main(){int a[60],t[60];int ncase,x;int i,j,k;scanf("%d",&ncase);while(ncase--){memset(a,0,sizeof(a));memset(t,0,sizeof(t));for(i=1;i<=26;i++){scanf("%d",&x);a[0]=1; for(j=0;j<=50;j++)for(k=0;k<=x && i*k+j<=50 ;k++)t[i*k+j]+=a[j];for(j=0;j<=50;j++)a[j]=t[j];memset(t,0,sizeof(t));}int ans=0;for(i=1;i<=50;i++)ans+=a[i];printf("%d\n",ans);}return 0;} 


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 小米手机出现繁体中文英文怎么办 雅思考试把姓名写错了怎么办 房贷的流水账假怎么办 报到证报道期限过期了怎么办 注销公司公章丢了怎么办 家里的猫太调皮怎么办 孩子纹身了我该怎么办 46天婴儿感冒了怎么办 狗病了不吃东西怎么办 幼儿急诊见风了怎么办 哺乳期乳房有硬块而且疼怎么办 哺乳期乳头破裂乳房似针扎怎么办 回奶胀痛的厉害怎么办 淡水龟的壳变软了怎么办 棕色的泰迪变白怎么办 大班教案泥石流来了怎么办 鸟类的嘴巴坏了怎么办 四川麦蚊子咬了怎么办 脸上被晒脱皮了怎么办 额头被晒脱皮了怎么办 脸黑一块白一块怎么办 小乌龟的壳软了怎么办 把田螺后面吃了怎么办 微生物生态菌群异常怎么办 怀孕初期感染了动物病毒怎么办? 金龙和银龙打架怎么办 海水缸盐度高了怎么办 洗空调洗坏了怎么办 老师是条青花鱼怎么办 吃了带鱼和南瓜怎么办 苹果平板ad忘了怎么办 小米6进海水了怎么办 小米手机掉海水里怎么办 苹果7进海水了怎么办 7p手机进海水怎么办 育海参苗出现红细菌怎么办 苹果手机掉进厕所怎么办 2个月的婴儿肺炎怎么办 甜甜圈珊瑚脱骨怎么办 宝宝吃了生物球怎么办 狗尾巴被剪掉了怎么办