zoukankan      html  css  js  c++  java
  • Evanyou Blog 彩带

      题目传送门

    题目描述

    平面上有N条直线,且无三线共点,那么这些直线能有多少不同的交点数?

    输入格式

    一个正整数N

    输出格式

    一个整数表示方案总数

    输入输出样例

    输入 #1
     4
    输出 #1
     5

    说明/提示

    N<=25


      分析:

      给定你$n$条直线,如果其中有$i$条平行,其他的不平行,那么交点数就是$(i*(n-i))$+($n-i$条直线的交点数)。那么我们就可以递归求出$n$条直线所有可能的方案(因为$n$很小),然后记录方案数就行了。

      其实也就等价于把这$n$条直线分成若干个平行的直线组,然后一组一组的加上交点数。

      Code:

    //It is made by HolseLee on 16th Aug 2019
    //Luogu.org P2789
    #include<bits/stdc++.h>
    using namespace std;
    
    int n,ans;
    bool vis[50005];
    
    void dfs(int now,int num)
    {
        if( now==0 ) { 
            if( !vis[num] ) ans++; 
            vis[num]=1; return;
        }
        for(int i=now; i>=1; --i) dfs(now-i,i*(now-i)+num);
    }
    
    int main()
    {
        cin>>n; dfs(n,0); cout<<ans; return 0;
    }
  • 相关阅读:
    20161203
    20161201
    20161128课堂笔记
    数组排序 (选择排序、冒泡排序、插入排序、希尔排序)
    编一个多用户登陆程序
    20161115课堂笔记
    20161114课堂笔记
    20161111课堂笔记
    面试常见问题
    java 基础第一周
  • 原文地址:https://www.cnblogs.com/cytus/p/11366437.html
Copyright © 2011-2022 走看看