Problem Description
平面上有n条直线,且无三线共点,问这些直线能有多少种不同交点数。
比如,如果n=2,则可能的交点数量为0(平行)或者1(不平行)。
Input
输入数据包含多个测试实例,每个测试实例占一行,每行包含一个正整数n(n<=20),n表示直线的数量.
Output
每个测试实例对应一行输出,从小到大列出所有相交方案,其中每个数为可能的交点数,每行的整数之间用一个空格隔开。
 Sample Input
2
3
Sample Output
0 1
0 2 3
题目分析:
容易列举出N= 1,2,3的情况:
0
0,1
0,2,3
当N= 4时;
1.第四条与其余三条直线全部平行 -->无交点  为 0;
2.第四条直线与其余两条直线平行-->交点数为(n-1)*1 +0 = 3;
3.第四题条直线与其余一条平行-->交点数为 (n-2)*2 +0 = 4   、(n-2)*2 +1 = 5
4.第四题条直线与其余都不平行-->交点数为 (n-3)*3 +0 = 3 、(n-3)*3 +2 = 5 、(n-3)*3 +3 = 6
规律:

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

/*
平面上有n条直线,且无三线共点,问这些直线能有多少种不同交点数。
比如,如果n=2,则可能的交点数量为0(平行)或者1(不平行)。
*/
#include<iostream>
using namespace std;
//行数代表几条线,列数代表交点数,当dp[i][j]==1时,代表存在 int dp[][] = {};//N条线最多 n*(n-)/ 2个交点 int main()
{
int N,b;
while(cin>>N)
{
dp[][] = dp[][] = ;//n =0和n = 1的情况
for(int n = ;n<=N;n++) //代表n条线
{
dp[n][] = ; //n条直线都平行时交点为0 for(int i=;i<n;i++)//i表示n条直线有i条平行
{ for(int j=;j<=n*(n-)/;j++)//j表示交点数
{
b = n - i -; //b为n条直线减去平行线
if(dp[b][j] == )
dp[n][(n-b)*b+j] = ;//m条直线的交点方案数 = (m-b)*b+b条之间本身的交点方案数(1<=r<=m) }
}
} for(int j=;j<N*(N-)/;j++)
{
if(dp[N][j] == )
cout<<j<<" ";
}
cout<<N*(N-)/<<endl; }
return ;
}

C++ 计算直线的交点数(动态规划)的更多相关文章

  1. HDU-1466 计算直线的交点数 经典dp

    1.HDU-1466   计算直线的交点数 2.链接:http://acm.hdu.edu.cn/showproblem.php?pid=1466 3.总结:不会推这个,看了题解.. 状态转移: m条 ...

  2. hdu----(1466)计算直线的交点数(dp)

    计算直线的交点数 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Su ...

  3. HDOJ 1466 计算直线的交点数

    将n 条直线排成一个序列,直线2和直线1最多只有一个交点,直线3和直线1,2最多有两个交点,......,直线n 和其他n-1条直线最多有n-1个交点.由此得出n条直线互不平行且无三线共点的最多交点数 ...

  4. 计算直线的交点数(set + 打表)

    计算直线的交点数 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total S ...

  5. G题 hdu 1466 计算直线的交点数

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1466 计算直线的交点数 Time Limit: 2000/1000 MS (Java/Others)  ...

  6. hdu1466计算直线的交点数 非原创

    原文链接 平面上有n条直线,且无三线共点,问这些直线能有多少种不同交点数. 比如,如果n=2,则可能的交点数量为0(平行)或者1(不平行). Input输入数据包含多个测试实例,每个测试实例占一行,每 ...

  7. 计算直线的交点数(hdu1466简单的dp)

    题意:平面上有n条直线,且无三线共点,问这些直线能有多少种不同交点数.比如,如果n=2,则可能的交点数量为0(平行)或者1(不平行). 思路:动态规划,想办法记忆化搜索,当前状态和之前状态结合起来 d ...

  8. hdu1466 计算直线的交点数

    题意: 平面上有n条直线,且无三线共点,问这些直线能有多少种不同交点数. 比如,如果n=2,则可能的交点数量为0(平行)或者1(不平行). 分析: DP 设状态:f[i][j]表示i条直线能否产生j个 ...

  9. hdu 1466 计算直线的交点数

    http://acm.hdu.edu.cn/showproblem.php?pid=1466 N条直线的交点方案数 = c 条直线交叉的交点数与(N-c)条平行线 + c 条直线本身的交点方案 = ( ...

随机推荐

  1. css-实现子元素垂直居中

    1.父元素:position:relative; 2.子元素:position:absolute; top:50%; transform:translate(0,-50%); 完美解决

  2. U3D 编辑器中sceneview下相机操作相关

    前几天在项目中想要实现一个编辑器模式下的3D空间画线功能,几经周折,还是作废. 原因有:相机空间到世界空间转换问题对于Z值不清楚,U3D自定义坐标轴控制问题,射线与平面求交点不对, 一个关键问题是:编 ...

  3. Haskell语言学习笔记(74)GADTs

    GADTs GADTs(Generalised Algebraic Data Types,广义代数数据类型)是对代数数据类型的一种扩展. 它允许在定义数据类型时明确指定类型参数的类型并使用模式匹配. ...

  4. [cocos2d-x]移动平台游戏开发(图)

    FreeMind的.mm文件下载: http://yunpan.cn/cfL3QrrQVkVTd (提取码:a125)

  5. ArcGIS案例学习笔记2_1_学校选址适宜性分析

    ArcGIS案例学习笔记2_1_学校选址适宜性分析 计划时间:第二天上午 目的:学校选址,适宜性分析 内容:栅格数据分析 教程:pdf page=323 数据:chapter8/ex1/教育,生活,土 ...

  6. Hadoop集群(四) Hadoop升级

    Hadoop前面安装的集群是2.6版本,现在升级到2.7版本. 注意,这个集群上有运行Hbase,所以,升级前后,需要启停Hbase. 更多安装步骤,请参考: Hadoop集群(一) Zookeepe ...

  7. 八皇后问题-dfs

    一.题意解析 国际象棋中的皇后,可以横向.纵向.斜向移动.如何在一个8X8的棋盘上放置8个皇后,使得任意两个皇后都不在同一条横线.竖线.斜线方向上?八皇后问题是一个古老的问题,于1848年由一位国际象 ...

  8. vue 安装sass扩展

    1.创建一个基于 webpack 模板的新项目 $ vue init webpack myvue 1 2.在当前目录下,安装依赖 $ cd myvue $ npm install 1 2 3.安装sa ...

  9. 通过网址request到response经历的过程

    前言当我们在浏览器中输入一个网址,比如www.google.cn,浏览器就会加载出百度的主页.那么浏览器背后完成的具体是怎么样的呢? 总结起来大概的流程是这样的: (1)浏览器本身是一个客户端,当你输 ...

  10. bootstrap 固定表头

    1 htmL <!DOCTYPE html> <html> <head> <title>Fixed Columns</title> < ...