日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[递归][DP]n条直线最多分平面为几部分?

發布時間:2025/4/5 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [递归][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

分析
遞歸

f(n)=2,when n=1 f(n)=f(n-1)+n,when n>1

遞推

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

#include<iostream> using namespace std;const long long maxn=1e9+7;int main(){long long n;cin>>n;long long result=1+n*(n+1)/2;cout<<result%maxn;}

總結

以上是生活随笔為你收集整理的[递归][DP]n条直线最多分平面为几部分?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。