HDU 1466 计算直线的交点数 dp晕

dp[a][b]:表示有a条边的时候,有b个交点。

状态方程:若dp[a][b]=1,则dp[a+k][b+(n-pingxing)*pingxing]=1;

#include<stdio.h>
#include<string.h>
int main()
{
	int n,f[25],dp[25][200];//[平行边的数量][交点数量]
	memset(dp,0,sizeof(dp));
	for(int i=0;i<=20;i++) dp[i][0]=1;
	for(int i=2;i<=20;i++)
	{
		for(int j=1;j<i;j++)
		{
			for(int k=0;k<200;k++)
			{
				if(dp[i-j][k])
				{
					dp[i][k+(i-j)*j]=1;
				}
			}
		}
	}
	while(~scanf("%d",&n))
	{
		for(int i=0;i<=n*(n-1)/2;i++)
		if(dp[n][i]) 
		{
			if(!i) printf("%d",i);
			else printf(" %d",i);
		}
		printf("\n");
	}
	return 0;
}

你可能感兴趣的:(HDU 1466 计算直线的交点数 dp晕)