计算直线的交点数
m条直线的交点方案数
=(m-r)条平行线与r条直线交叉的交点数
+ r条直线本身的交点方案
=(m-r)*r+r条之间本身的交点方案数(1<=r<=m)
#include <iostream>
using namespace std;
int main()
{
int n;
int crossPoint[1400];
memset(crossPoint,0,sizeof(crossPoint));
int index[22];
memset(index,0,sizeof(index));
index[1]=1;
while(cin>>n)
{
int k=1;
for(int i=1;i<=n;i++)
{
int count=0;
for(int m=0;m<=i-1;m++)
{
for(int j=index[i-m-1];j<index[i-m];j++)
{
crossPoint[k++]=(m+1)*(i-m-1)+crossPoint[j];
count++;
}
}
for(int j=index[i];j<index[i]+count;j++)
for(int s=j+1;s<index[i]+count;s++)
{
if(crossPoint[j]==crossPoint[s])
{
if(s==index[i]+count-1)
{
crossPoint[s]=0;
}
else
{
for(int f=s;f<index[i]+count-1;f++)
crossPoint[f]=crossPoint[f+1];
s--;
}
count--;
k--;
}
}
for(j=index[i];j<index[i]+count;j++)
for(int s=j+1;s<index[i]+count;s++)
{
if(crossPoint[j]>crossPoint[s])
{
int temp=crossPoint[j];
crossPoint[j]=crossPoint[s];
crossPoint[s]=temp;
}
}
index[i+1]=index[i]+count;
}
for(i=index[n];i<index[n+1];i++)
if(i!=index[n+1]-1)
cout<<crossPoint[i]<<" ";
else
cout<<crossPoint[i];
cout<<endl;
}
return 0;
}
第一次写dp,比较失败,没有写出dp的感觉出来