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. Spark 调优(转)

    Spark 调优 返回原文英文原文:Tuning Spark Because of the in-memory nature of most Spark computations, Spark pro ...

  2. java后端实习生面试题目

    1.编程题:java从10000到99999找到AABB类型 public class Test1 { public static void main(String[] args) { String ...

  3. mycat 分库分表

    单库分表已经在上篇写过了,这次写个分库分表,不同在于配置文件上的一点点不同 <!DOCTYPE mycat:schema SYSTEM "schema.dtd"> &l ...

  4. C# DataTable使用方法详解--删除表数据

    在项目中常常常使用到DataTable,假设DataTable使用得当,不仅能使程序简洁有用,并且可以提高性能,达到事半功倍的效果,现对DataTable的使用技巧进行一下总结. 1.添加引用 1 u ...

  5. Aop 中 JoinPoint等对象的用法Api

    @Aspect 定义类为切入类 @Pointcut 声明一个切入策略供 @Before @After @ Around @ AfterReturning选择 @Before 被切入方法执行前执行 @A ...

  6. MySQL缓存分类和配置

    读书笔记,待补充完善 MySQL缓存分类 InnoDB缓冲池 InnoDB日志文件和MyIsAM数据的操作系统缓存 MyIsAM键缓存 查询缓存 无法手工配置的缓存,二进制日志,表定义文件的操作系统缓 ...

  7. mongoDB如何处理多对多关系

    问题描述: 例如在关系数据库中有一个Team表,一个User表,两者是多对多的关系,即一个Team可以有多个User,一个User也可能属于多个Team,请问这样的关系在MongoDB中如何存储? 如 ...

  8. 远程批量查看windosws操作系统3389端口的开放情况

    本文只提供思想.具体可以根椐情况拓展. 前提是需要配置远程主机的SNMP协议.主要是共同体哟. 脚本使用: 1.拷贝check_tcp到脚本执行的主机中或在此主机中安装nagios; 2.保持list ...

  9. 吴裕雄 python神经网络 花朵图片识别(10)

    import osimport numpy as npimport matplotlib.pyplot as pltfrom PIL import Image, ImageChopsfrom skim ...

  10. jquery.cookie介绍和用法

    1.依赖jQuery库 2.浏览器兼容性情况 3.下载 官方github:https://github.com/carhartl/jquery-cookie 4.使用 创建一个整站cookie $.c ...