计算直线的交点数
Problem Description
平面上有n条直线,且无三线共点,问这些直线能有多少种不同交点数。
比如,如果n=2,则可能的交点数量为0(平行)或者1(不平行)。
Input
输入数据包含多个测试实例,每个测试实例占一行,每行包含一个正整数n(n<=20),n表示直线的数量.
Output
每个测试实例对应一行输出,从小到大列出所有相交方案,其中每个数为可能的交点数,每行的整数之间用一个空格隔开。
Sample Input
2
3
Sample Output
0 1
0 2 3
解题思路:
有人说是简单的dp,但是我认为是简单dfs。
n条边互不平行(即只有一条边互相平行),那么每条边与其他边的交点个数为1*(n-1),如果有m条边相互平行,那么这m条边与其他边的交点数为m*(n-m)。那么该问题可以看着把一个整数n分解为n=a1+a2+a3…+an..其中ai为正整数。
f( n )={ a1*(n-a1)+a2*(n-a2)+…+an*(n-an) }/2;
为了优化计算:可以看着n个盆子,向n个盆子里,放入n个球,可以假设ai>=aj ( 其中i<j );