动态规划 HDU 1466 计算直线的交点数

原题:链接


思路

n条直线的交点方案数 =(n-r)条平行线与r条直线交叉的交点数 + r条直线本身的交点方案
=(n-r)*r + r条之间本身的交点方案数(0<=r<=n)


本题状态:dp[i][j]=1,意为i条直线可以存在j条交点;dp[i][j]=0,i条直线不存在j个交点的情况
状态转移方程:n条直线,若dp[r][j]=1,则dp[n][r*(n-r)+j]=1;即如果r条线交点个数为j情况存在,那

么整体上,n条直线有r*(n-r)+j个交点可行


代码

#include
#include
int main()
{
	int i,j,n,r,dp[21][191];
	memset(dp,0,sizeof(dp));
	for(n=0;n<21;n++)
	{
		dp[n][0]=1;//无论多少条直线交点数为0都有可能
		for(r=0;r<=n;r++)
		{
			for(j=0;j<191;j++)
			{
				if(dp[r][j])
					dp[n][r*(n-r)+j]=1;
			}
		}
	}
	while(~scanf("%d",&n))
	{
		for(i=0;i


鸣谢

http://blog.csdn.net/cqlf__/article/details/7068570
http://www.360doc.com/content/13/0601/00/8076359_289597587.shtml

你可能感兴趣的:(动态规划)