zoukankan      html  css  js  c++  java
  • DP+数学——计算直线的交点数

    Description

    平面上有n条直线,且无三线共点,问这些直线能有多少种不同交点数。 比如,如果n=2,则可能的交点数量为0(平行)或者1(不平行)。

    Input

    输入数据包含多个测试实例,每个测试实例占一行,每行包含一个正整数n(n <= 20),n表示直线的数量.

    Output

    每个测试实例对应一行输出,从小到大列出所有相交方案,其中每个数为可能的交点数,每行的整数之间用一个空格隔开。

    Sample Input

    2
    3
    

    Sample Output

    0 1
    0 2 3

    HINT

     大意:n条直线最多的交点数为n(n-1)/2,假设有那条线,i条平行线,自由线的交点数为k,那么n条线的交点等于(i-j)*j+k
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
        int dp[21][400];//共i条直线j个交点
        int main()
        {
            int n;
           while(~scanf("%d",&n)){
                memset(dp,0,sizeof(dp));
                for(int i = 0; i <= 21 ;i++)
                   dp[i][0] = 1;
                for(int i = 1; i <= 21;i++){
                    for(int j = 0; j < i;j++){//平行线的对数
                        for(int k = 0; k < 191;k++){
                            if(dp[i-j][k] == 1)
                            dp[i][(i-j)*j+k] = 1;
                        }
                    }
                }
                printf("0");
                for(int i = 1; i <= 190; i++){
                        if(dp[n][i] == 1)
                        printf(" %d",i);
                }
           puts("");
         }
           return 0;
    }
    

      

  • 相关阅读:
    CBV进阶(一)
    uva 11748 Rigging Elections
    uva 11573 Ocean Currents(bfs+优先队列)
    无向图的欧拉路
    poj 3254 Corn Fields
    hdu 1114
    hdu 2639 (第k小的01背包)
    uva 1347 tour
    uva 437 The Tower of Babylon
    uva 1025 A Spy in the Metro(动态规划)
  • 原文地址:https://www.cnblogs.com/zero-begin/p/4374763.html
Copyright © 2011-2022 走看看