http://acm.hdu.edu.cn/showproblem.php?pid=1028
写了第一个母函数,发现技巧性很强,继续努力
由(1+x+x^2+x^3+……+x^n)+(1+x^2+x^4+……+x^2n)+…………每个表达式中幂的递增是倍数的关系
View Code
1 #include<stdio.h> 2 #define max 100001 3 int main( ) 4 { 5 int n; 6 int i; 7 int j; 8 int k; 9 int c1[max]; //保存各组合的数目 10 int c2[max]; //保存中间结果 11 while( scanf("%d",&n) != EOF ) 12 { 13 for( i = 0; i <= n; i++ ) 14 { 15 c1[i] = 1; //将幂级0到n的系数初始化为0 16 c2[i] = 0; //中间结果先初始化为0 17 } 18 for( i = 2; i <= n; i++ ) //每个表达式x的幂都是以i递增 19 { 20 for( j = 0; j <= n; j++ ) //j指向幂级0到n的项 21 { 22 for( k = 0; k+j <= n ; k += i )//k指向被处理的表达式中的项 23 { 24 c2[k+j] += c1[j]; //保存组合的表达式系数 25 } 26 } 27 for ( j = 0; j <= n; j++ ) 28 { 29 c1[j] = c2[j]; //将中间结果给C1数组,此时幂级0到n的系数已变化 30 c2[j] = 0; 31 } 32 } 33 printf("%d\n",c1[n]); 34 } 35 return 0; 36 }