计算直线的交点数
Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 820 Solved: 518
Description
平面上有n条直线,且无三线共点,问这些直线能有多少种不同交点数。比如,如果n=2,则可能的交点数量为0(平行)或者1(不平行)。
Input
输入数据包含多个测试实例,每个测试实例占一行,每行包含一个正整数n(n <= 20),n表示直线的数量.
Output
每个测试实例对应一行输出,从小到大列出所有相交方案,其中每个数为可能的交点数,每行的整数之间用一个空格隔开。
Sample Input
2 3
Sample Output
0 1 0 2 3
把m条线分成r和m-r两部分({n}只n条线时的交点方案的集合)
{Pay points}=r*(m-r)+{m-r}, dp[i][j]为是否存在标志,
1 # include<stdio.h> 2 int main() 3 { 4 // freopen("a.txt","r",stdin); 5 int i,j,k,m,n; 6 int a[22][200]; 7 8 while(scanf("%d",&n)!=EOF) 9 { 10 for(i=0;i<190;i++) 11 a[0][i]=0; 12 for(i=1;i<=n;i++) 13 { 14 a[i][0]=1; 15 for(j=1;j<=(i-1)*i/2;j++) 16 a[i][j]=0; 17 for(j=1;j<i;j++) 18 { 19 m=i-j; 20 for(k=0;k<=m*(m-1)/2;k++) 21 { 22 if(a[m][k]==1) 23 a[i][k+j*m]=1; 24 /* printf("%d,%d %d,%d ",m,k,i,k+j*m); 25 printf(" ");*/ 26 } 27 } 28 } 29 printf("0"); 30 for(i=1;i<=n*(n-1)/2;i++) 31 { 32 if(a[n][i]==1) 33 printf(" %d",i); 34 } 35 printf(" "); 36 } 37 return 0; 38 }