直线交点数

题目描述
平面上有N条直线,且无三线共点,那么这些直线能有多少不同的交点数?

输入输出格式

输入格式:
一个正整数N
输出格式:
一个整数表示方案总数

输入输出样例

输入样例#1:
4
输出样例#1:
5

说明
N<=25
.
.
.
.
.
.

分析

用 a[x,y]表示直线条数为x时,是否可以有y个交点。(是为1,否为0)。
n条直线相交,最多有n*(n-1)/2个交点。
设i条直线相交,有j条平行,剩下(i-j)条相交于这j条直线。(1≤j≤i)
则共 ((i-j)*j+k)个交点,其中k为(i-j)条直线相交可能的点数。
最后,只要统计a[n,i] (0≤i≤n*(n-1)/2) 中可行方案的总数即可。
.
.
.
.
.
.

程序:
var
a:array[1..25,0..300]of longint;
n,m,i,j,k,ans:longint;
begin
    readln(n);
    fillchar(a,sizeof(a),0);
    for i:=1 to n do
    begin
        a[i,0]:=1;
        for j:=1 to i do
        begin
            m:=i-j;
            for k:=0 to (m*(m-1)) div 2 do
            if a[m,k]=1 then a[i,m*j+k]:=1;
        end;
    end;
    ans:=0;
    for i:=0 to (n*(n-1))div 2 do
    if a[n,i]=1 then inc(ans);
    writeln(ans);
end.

posted @ 2018-02-22 12:06  银叶草  阅读(444)  评论(0编辑  收藏  举报
Live2D