hdu1466 dp:直线可能交点数
i,j,k
有j条自由,剩下i-j条相互平行,[j][k]状态表示是否可行
1 #include<stdio.h> 2 #include<string.h> 3 int dp[25][200]; 4 int main() 5 { 6 int i,j,k,n,flag; 7 memset(dp,0,sizeof(dp)); 8 dp[0][0]=dp[1][0]=1; 9 for (i=2;i<=20;i++) 10 for (j=0;j<=i;j++) 11 for (k=0;k<=190;k++) 12 if (dp[j][k]) dp[i][k+j*(i-j)]=1; 13 while (~scanf("%d",&n)) 14 { 15 flag=0; 16 for (i=0;i<=190;i++) 17 if (dp[n][i]) 18 { 19 if (flag) printf(" "); 20 else flag=1; 21 printf("%d",i); 22 } 23 printf("\n"); 24 } 25 }