1
2
3
4
5
6
7
8
9
10
11
12
13 #include
14 using namespace std;
15 const int N=310;
16 int a[N];
17 int b[N];
18 int c[N];
19 void Poly()
20 {
21 memset(c,0,sizeof(c));
22 for(int i=0;i<N;i++)
23 for(int j=0;j<N-i;j++)
24 {
25 c[i+j]+=a[i]*b[j];
26 }
27 }
28 void Init()
29 {
30 memset(a,0,sizeof(a));
31 memset(c,0,sizeof(c));
32 int step;
33 for(int i=0;i<N;i++)
34 a[i]=1;
35 for(int k=2;k<18;k++)
36 {
37 memset(b,0,sizeof(b));
38 step=k*k;
39 for(int i=0;i<N;i=i+step)
40 {
41 b[i]=1;
42 }
43 Poly();
44 memcpy(a,c,sizeof(c));
45 }
46 }
47 int main()
48 {
49 int n;
50 Init();
51 while(scanf("%d",&n),n)
52 {
53 printf("%d\n",a[n]);
54 }
55 }
hdu1398 参考答案 (2008-10-10 22:21:18由218编辑)