HDU 1466 计算直线的交点数
Description
平面上有n条直线,且无三线共点,问这些直线能有多少种不同交点数。
比如,如果n=2,则可能的交点数量为0(平行)或者1(不平行)。
Input
输入数据包含多个测试实例,每个测试实例占一行,每行包含一个正整数n(n<=20),n表示直线的数量.
Output
每个测试实例对应一行输出,从小到大列出所有相交方案,其中每个数为可能的交点数,每行的整数之间用一个空格隔开。
Sample Input
2
3
Sample Output
0 1
0 2 3
Source
#include <stdio.h>
int main(int argc, char *argv[])
{
int dp[21][200];
for(int i=1; i<=20; i++){
//一共有190个交点
for(int j=0; j<=190; j++){
if(j==0){
dp[i][j]=1;
}else{
dp[i][j]=0;
}
}
}
for(int i=2; i<=20; i++){
for(int j=i-1; j>=1; j--){
for(int k=0; k<=190; k++){
//设有j条边平行,那么就多出(i-j)*j个交点
if(dp[i-j][k])
dp[i][k+(i-j)*j]=1;
}
}
}
int n;
while( scanf("%d",&n)!=EOF ){
int flag=0;
for(int i=0; i<=190; i++){
if(dp[n][i]==1){
if(flag)printf(" ");
printf("%d",i);
flag=1;
}
}
printf("\n");
}
return 0;
}

浙公网安备 33010602011771号