杭电1028 Ignatius and the Princess III 皇星客栈

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 }
原文地址:https://www.cnblogs.com/huangxingkezhan/p/2633050.html