1
2
3
4
5
6
7
8
9
10
11
12
13
14 #include
15 using namespace std;
16 const int N=22;
17 bool ans[N][N*N];
18
19 void Init_n(int n)
20 {
21 int tmp;
22 ans[n][0]=true;
23 for(int r=1;r<n;r++)
24 {
25 int s=n-r;
26 tmp=s*(s-1)/2;
27 for(int j=0;j<=tmp;j++)
28 {
29 if(ans[s][j]==false)
30 continue;
31 ans[n][r*s+j]=true;
32 }
33 }
34 }
35 void Init()
36 {
37 memset(ans,0,sizeof(ans));
38 ans[0][0]=true;
39 ans[1][0]=true;
40 ans[2][0]=ans[2][1]=true;
41 for(int n=3;n<N;n++)
42 Init_n(n);
43 }
44
45 void OutPut(int n)
46 {
47 int tmp=n*(n-1)/2;
48 printf("0");
49 for(int i=1;i<=tmp;i++)
50 {
51 if(ans[n][i])
52 printf(" %d",i);
53 }
54 printf("\n");
55 }
56 int main()
57 {
58 Init();
59 int n;
60 while(scanf("%d",&n)!=EOF)
61 {
62 OutPut(n);
63 }
64 }
hdu1466 参考答案 (2008-11-12 14:25:50由218编辑)