1 #include<stdio.h> 2 #include<string.h> 3 #define N 21 4 #define M N*(N-1)/2 5 int dp[N][M]; 6 int main() 7 { 8 int i, j, n, k; 9 dp[0][0] = 1;dp[1][0] = 1; 10 for(n = 2; n <= N; n++){ 11 for(i = 0; i < n; i++){ 12 for(j = 0; j <= i * (i-1) / 2; j++){ 13 if(dp[i][j] == 1){ 14 dp[n][i * (n-i) + j] = 1; 15 } 16 } 17 } 18 } 19 while(~scanf("%d", &n)) 20 { 21 printf("0"); 22 for(i=1; i<=n*(n-1)/2; i++){ 23 if(dp[n][i] == 1){ 24 printf(" %d", i); 25 } 26 } 27 printf("\n"); 28 } 29 return 0; 30 }
HDU 1466 计算直线的交点数,布布扣,bubuko.com
原文:http://www.cnblogs.com/qiu520/p/3623957.html