zoukankan      html  css  js  c++  java
  • hd acm1466

    http://www.cnblogs.com/alihenaixiao/p/4107907.html#undefined。这个博客有详解,我这个只是写一些·自己的总结。

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

    析:   多条直线在一起时,要么相交,要么平行,所以我们可以把n条直线分为平行的一组,不平行的一组,那么答案就出来了;

        平行的那组(假设有i条平行)交点数为0,那么相交的那组 (还有n-i条)交点为f(n-i),;两组之间的交点有i*(n-i)个交点,三者相加便是n条直线存在交点的情况,而随着i与n-i的          变化,n条直线的交点数目情况便都出来了。

    代码:

    #include<stdio.h>
    int dp[21][191];            //d[直线的总数][交点的个数]。

    int main()
    {
      int i,j,k,n;
      for(i=0;i<21;i++)
      {
        dp[i][0]=1;
      }
      for(i=1;i<21;i++) //i代表线段总数,j代表平行的线段总数,那么(i-j)代表相交的直线总数。
        for(j=0;j<i;j++)
        {
          for(k=0;k<=i*(i-1)/2;k++) //i条直线最多有(i-1)/2个交点。
          {
            if(dp[i-j][k]) //这个是检查当有(i-j)条直线时存不存在这些直线有k个交点的情况。
            dp[i][(i-j)*j+k]=1;
          }
        }
      }
      while(~scanf("%d",&n))
      {
        for(i=0;i<n*(n-1)/2;i++)
        {
          if(dp[n][i])printf("%d ",i);
        }
        printf("%d ",n*(n-1)/2);
      }
      return 0;
    }

  • 相关阅读:
    阿里云ecs服务器wamp内网可以访问,外网ip、域名无法访问
    python- 粘包 struct,socketserver
    python-网络编程
    python-模块-包
    python- 异常
    python-模块 time, os, sys
    python_模块 collections,random
    python_模块 hashlib ,configparser, logging
    python_ 模块 json pickle shelve
    python-面向对象中的特殊方法 ,反射,与单例模式
  • 原文地址:https://www.cnblogs.com/clljs/p/7467505.html
Copyright © 2011-2022 走看看