[递归][DP]n条直线最多分平面为几部分?
生活随笔
收集整理的这篇文章主要介绍了
[递归][DP]n条直线最多分平面为几部分?
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
51nod 3035 划分平面
链接https://www.51nod.com/Challenge/Problem.html#problemId=3035
用n条直线,划分平面,最多能够划分为多少块?
例如:
1条可以划分为2块
2条可以划分为4块
3条可以划分为7块
输入
共一行:1个数n(1≤n≤10^9)
输出
输出共1行,对应划分的数量 Mod 10^9+7
数据范围
对于20%的数据,1≤n≤10;
对于44%的数据,1≤n≤20000;
对于100%的数据,1≤n≤10^9;
输入样例
3
输出样例
7
分析
递归
递推
2+2+3+4+...+n=1+1+2+3+...+n=1+n*(n+1)/2想用递归来写,这样会超时
记忆化递归呢?数组得开很大,空间花销太大
从记忆化递归到用动态规划dp来写,估计也不能全过,看看效果
代码如下
#include<iostream> #include<string> #include<cstring> #include<vector> using namespace std;const long long maxn=1e9+7;long long split(int n){long long dp[n+1];dp[1]=2;for(int i=2;i<=n;i++)dp[i]=i+dp[i-1];return dp[n]; } int main(){int n;cin>>n;long long result=split(n);cout<<result%maxn;}好了,直接说公式1+n*(n+1)/2,这个直接AC
注意类型long long
总结
以上是生活随笔为你收集整理的[递归][DP]n条直线最多分平面为几部分?的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 作为大城市租房的年轻人,你工作多久才不依
- 下一篇: 51Nod-2149子串水题find