zoukankan      html  css  js  c++  java
  • HDU 1466 计算直线的交点数

    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 0条
    n=2 0,1条
    n=3 0,2,3条
    n=4 0,3,4,5,6条
    n条线最多的交点数为n*(n-1)/2;
    假设n条线里有i条线平行,那么n条线的交点数为i*(n-i)+j,j表示剩余的(n-i)条线可能的交点数。dp[i][j]=1表示i条线可有j个交点。
     1 #include<stdio.h>
     2 #include<string.h>
     3 #define N 21
     4 #define M N*(N-1)/2
     5 int dp[N][M];
     6 int main()
     7 {
     8     int i, j, n, k;
     9     dp[0][0] = 1;dp[1][0] = 1;
    10     for(n = 2; n <= N; n++){
    11         for(i = 0; i < n; i++){
    12             for(j = 0; j <= i * (i-1) / 2; j++){
    13                 if(dp[i][j] == 1){
    14                     dp[n][i * (n-i) + j] = 1;
    15                 }
    16             }
    17         }
    18     }
    19     while(~scanf("%d", &n))
    20     {
    21         printf("0");
    22         for(i=1; i<=n*(n-1)/2; i++){
    23             if(dp[n][i] == 1){
    24                 printf(" %d", i);
    25             }
    26         }
    27         printf("
    ");
    28     }
    29     return 0;
    30 }
    View Code
  • 相关阅读:
    java基础笔记-类与对象(多态)
    oracle中trim,ltrim,rtrim函数用法
    git stash
    update from select
    oracle 查看主外键约束
    eclipse git 解决冲突
    根据Request获取客户端IP
    简单说说Spring Security 使用(附加验证码登录,自定义认证)
    linux的nohup命令的用法
    Python包管理工具介绍
  • 原文地址:https://www.cnblogs.com/qiu520/p/3623957.html
Copyright © 2011-2022 走看看