HDU 1466 计算直线的交点数(dp)
2015-09-04 08:31
423 查看
Description
平面上有n条直线,且无三线共点,问这些直线能有多少种不同交点数。
比如,如果n=2,则可能的交点数量为0(平行)或者1(不平行)。
Input
输入数据包含多个测试实例,每个测试实例占一行,每行包含一个正整数n(n<=20),n表示直线的数量.
Output
每个测试实例对应一行输出,从小到大列出所有相交方案,其中每个数为可能的交点数,每行的整数之间用一个空格隔开。
Sample Input
2
3
Sample Output
0 1
0 2 3
Solution
将n条线分成互相平行的线i条和不平行的线n-i条(这里的不平行指的是不与那i条平行线平行),用dp[x][y]表示x条线是否可以形成y个交点(初始化dp[x][0]=1,dp[x][y]=0(y!=0)),那么若dp[n-i][k]=1,则dp
[k+i*(n-i)]=1,因为线的条数不会超过20条,交点数也就不会超过200个,所以预处理dp数组时,第一重循环枚举线的条数,第二重循环枚举平行线的条数,第三重循环枚举交点个数,总复杂度为O(20*20*200),完全可以接受
Code
平面上有n条直线,且无三线共点,问这些直线能有多少种不同交点数。
比如,如果n=2,则可能的交点数量为0(平行)或者1(不平行)。
Input
输入数据包含多个测试实例,每个测试实例占一行,每行包含一个正整数n(n<=20),n表示直线的数量.
Output
每个测试实例对应一行输出,从小到大列出所有相交方案,其中每个数为可能的交点数,每行的整数之间用一个空格隔开。
Sample Input
2
3
Sample Output
0 1
0 2 3
Solution
将n条线分成互相平行的线i条和不平行的线n-i条(这里的不平行指的是不与那i条平行线平行),用dp[x][y]表示x条线是否可以形成y个交点(初始化dp[x][0]=1,dp[x][y]=0(y!=0)),那么若dp[n-i][k]=1,则dp
[k+i*(n-i)]=1,因为线的条数不会超过20条,交点数也就不会超过200个,所以预处理dp数组时,第一重循环枚举线的条数,第二重循环枚举平行线的条数,第三重循环枚举交点个数,总复杂度为O(20*20*200),完全可以接受
Code
#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> using namespace std; bool dp[22][222]; void goto_dp() { for(int i=0;i<22;i++) dp[i][0]=1; for(int i=2;i<22;i++)//枚举线的条数 for(int j=1;j<=i;j++)//枚举平行线的条数 for(int k=0;k<222;k++)//枚举i-j条线的相交情况 if(dp[i-j][k])//如果i-j条线有k个交点,那么加上j条平行线后就有k+j*(i-j)个交点 dp[i][k+j*(i-j)]=1; } int main() { memset(dp,0,sizeof(dp));//初始化 goto_dp();//预处理 int n; while(~scanf("%d",&n)) { int first=1;//标记是否是第一个输出的交点数 for(int i=0;i<222;i++)//判断n条线是否可以形成i个交点 { if(dp [i]&&first) printf("%d",i),first=0; else if(dp [i]) printf(" %d",i); } printf("\n"); } return 0; }
相关文章推荐
- HDU 1536 S-Nim(博弈论)
- PHP基础----HTML表单的创建与提交----18表单与 PHP
- Threat Intellgence
- POJ 1284 Primitive Roots(欧拉函数)
- POJ 2034 Anti-prime Sequences(数论+dfs)
- POJ 1365 Prime Land(分解质因数)
- POJ 2115 C Looooops(一元线性同余方程)
- POJ 3090 Visible Lattice Points(欧拉函数)
- POJ 2478 Farey Sequence(欧拉函数)
- POJ 2773 Happy 2006(数论)
- PHP基础----常用库函数----17图片打水印实例
- Fragment+RadioButton实现点击切换页面效果
- PHP基础----常用库函数----16生成图片
- C++之随笔(二)
- 关于存储过程可空条件查询
- PHP基础----常用库函数----15文件操作
- PHP基础----常用库函数----14JSON格式数据的操作
- PHP基础----常用库函数----13时间和日期
- TQ2440 学习笔记—— 18、存储控制器
- Bash在cd进入目录时自动启动脚本