洛谷P2789 直线交点数 [数论,递归]
题目描述
平面上有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; }
蒟蒻写博客不易,如果有误还请大佬们提出
如需转载,请署名作者并附上原文链接,蒟蒻非常感激
名称:HolseLee
博客地址:www.cnblogs.com/cytus
个人邮箱:1073133650@qq.com
如需转载,请署名作者并附上原文链接,蒟蒻非常感激
名称:HolseLee
博客地址:www.cnblogs.com/cytus
个人邮箱:1073133650@qq.com