[递归][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