题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=2082
这是一道关于母函数的问题,他的方程可以这样写
比如A、B、C分别是1、2、3其他为0
那么F(x)=(x+1)*(x^4+x^2+1)*(x^9+x^6+x^3+1)。
(x^9+x^6+x^3+1)分别代表C取3个、2个、1个和0个。
那么这道题目答案即为F(x)中x从1到50的系数之后。
代码如下:
#include <iostream> #include <cstdio> #include <cstdlib> #include <cmath> #include <cstring> #include <string> #include <algorithm> #include <vector> #include <set> #include <map> #include <queue> #include <stack> using namespace std; /* freopen("input.txt","r",stdin); freopen("output.txt","w",stdout); */ int xh[27],a[51],b[51]; int main() { int i,n,t,j,k; cin>>t; while(t--) { for(i=1;i<=26;i++) { scanf("%d",&xh[i]); } memset(a,0,sizeof(a)); for(i=0;i<=xh[1];i++) a[i]=1;//将第一个的系数给a for(i=2;i<=26;i++)//从第二项开始 { if(xh[i]==0) continue; memset(b,0,sizeof(b)); for(k=0;k<=50;k++)//系数从0到50 { if(a[k]==0) continue; for(j=0;j<=xh[i];j++) { if(k+i*j<=50)//i*j依次表示第i项x的指数 { b[k+i*j]+=a[k]; } } } for(j=0;j<=50;j++)//将结果给a a[j]=b[j]; } int sum=0; for(i=1;i<=50;i++)//求和 sum+=a[i]; printf("%d\n",sum); } return 520; }