HDU1466 计算直线交点(输出各种交点方案)
来源:互联网 发布:orcad怎么导出网络表 编辑:程序博客网 时间:2024/05/21 19:49
#include<stdio.h>
#include<stdlib.h>
int a[21][191];
int main()
{
int i,j,k,sum,p,q,n;
a[0][0]=1;
a[1][0]=1;
a[2][0]=1;
a[2][1]=1;
for(i=3;i<=20;i++)
{
for(j=0;j<i;j++)
{
sum=j*(j-1)/2; //i条直线中j条自由线的最大交点数
for(k=0;k<=sum;k++)
{
if(a[j][k]) //j条直线k个交点的情况存在
{
p=(i-j)*j+k; /*i条直线中有j条自由线,则i-j条平行线与j条自由线
有 (i-j)*j个交点 ,*/
a[i][p]=1; //i条直线p个交点的情况存在则标记为1
}
}
}
}
while(scanf("%d",&n)!=EOF)
{
q=n*(n-1)/2;
for(i=0;i<q;i++)
{
if(a[n][i]) printf("%d ",i);
}
printf("%d/n",q);
}
return 0;
}
/*设一个数组dp[i][j]来记录i条直线,j个交点的情况是否存在,若存在,dp[i][j]=1,反
之,dp[i][j]=0.在输入n之前,先将所有可能情况用数组dp记录下来。方法如下:
dp[i][0]=1;无论有多少条直线,交点为0(所有直线平行)的情况必定存在,故赋值为1.
假设有n条直线,那么这n条直线的交点数可以看作是(n-i)*i与j的和,这里(n-i)表示
平行线的条数,i表示自由线的条数,j表示i条自由线的交点数。因为1条自由线与(n-i)条
平行线必定有(n-i)*1个交点,这里申明下自由线与平行线不会平行,否则自由线与平行线
就没有区分的必要了。那么i条自由线与平行线的交点总数就为(n-i)*i,由于i条自由线可
能互相平行也可能相交,故需要加上i条自由线自身的交点数j。其实这个j与计算n条直线的
交点数的方法是一样的,只不过规模缩小了,正是因为这点我们才可以使用DP算法来解这题。
数学表达式:
f(n)=(n-i)*i+j;*/
- HDU1466 计算直线交点(输出各种交点方案)
- hdu1466 计算直线的交点数(找规律+数学)
- hdu1466计算直线的交点数
- hdu1466 计算直线的交点数
- HDU1466 计算直线的交点数
- HDU1466 计算直线的交点数
- hdu1466 计算直线的交点数
- hdu1466 计算直线的交点个数
- HDU1466 计算直线的交点数
- HDU1466 计算直线的交点数
- hdu1466计算直线的交点数
- hdu1466计算直线的交点数
- hdu1466 计算直线的交点数 DP
- HDU1466 计算直线的交点数
- hdu1466 dp+直线交点问题
- hdu1466计算交点数(DP)
- hdu1466 计算直线的交点数//dp+set
- 计算直线的交点数(hdu1466简单的dp)
- VB與vb.net的一些區別
- HDU 1072 Nightmare(类似可以回走且能加时的迷宫)
- 启动DI
- PPT 双屏备注方式 如果视频不能在第二屏播放 而是在第一屏 改视频格式就可以~!
- java写一个计算器
- HDU1466 计算直线交点(输出各种交点方案)
- 下载时如果ie说无法连接到该网站怎么办
- 扔蛋的最少次数
- 树形控件(CTreeCtrl)使用简介
- 哇.. 我的第一个blog 欢迎大家来哦..
- 读、写大字段CLOB 的常用方法
- Oracle CHAR,VARCHAR,VARCHAR2,nvarchar类型的区别与使用【转】
- [IPhone] 如何让iphone自动分辨960*640与480*320解析度
- 基于jrtplib的NAT穿透