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 }
View Code

传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1466

posted on 2014-11-01 09:34  xiao_xin  阅读(63)  评论(0编辑  收藏  举报

导航