HDU 1466计算直线的交点数

作者在 2008-05-08 21:39:10 发布以下内容

//相交直线数

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

典型的DP 
#include<stdio.h>
int main()
{
 int i,j,n,f[21][191];
 //f[i][j]表示i条边时,是否能产生j个结点,能,返回1,不能,返回0
 for(i=0;i<21;i++)
  for(j=0;j<191;j++)
   f[i][j]=(j==0);
  //f[i][0]都置1
  for(n=2;n<21;n++)
   for(i=n-1;i>=1;i--)
    for(j=0;j<191;j++)
     if(f[n-i][j]==1)
      f[n][j+(n-i)*i]=1;
     //如果f[n][x]==1
     //f[n][x+((n-i)*i)]=1
     while(scanf("%d",&n)!=EOF)
     {
      printf("0");
      for(j=1;j<=n*(n-1)/2;j++)
       if(f[n][j])
        printf(" %d",j);
       printf("\n");
     }
  return 0;
}

ACM | 阅读 3318 次
文章评论,共1条
honesty2008
2010-08-21 15:55
1
要是有些解题思路就更好了
游客请输入验证码
最新评论