比如,如果n=2,則可能的交點數量爲0(平行)或者1(不平行)。
問題分析:
實現:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int DP[21][200];
int N,n,free,j;
memset(DP,0,sizeof(DP));
for(n=1;n<21;n++)
{
DP[n][0]=1;
}
for(n=1;n<21;n++) //直線總數
{
for(free=0;free<n;free++) //自由直線總數
{
for(j=0;j<n*(n-1)/2;j++) //可能的交點數
{
if(DP[free][j]==1) //若free條自由直線有j個交點的可能性爲真
{
DP[n][free*(n-free)+j]=1; //那麼n條直線在free條自由直線,n-free條平行直線的情況下
//的free*(n-free)+j個交點的可能性爲真
}
}
}
}
while(scanf("%d",&N)==1)
{
int i,top=N*(N-1)/2;
for(i=0;i<=top;i++)
{
if(i==0)//爲HDU ACM格式化輸出
{
printf("0");
continue;
}
if(DP[N][i]==1)
{
printf(" %d",i);
}
}
printf("\n");
}
}