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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

LeetCode-剑指 Offer 14- I. 剪绳子

發布時間:2025/4/5 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode-剑指 Offer 14- I. 剪绳子 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

思路一:動態規劃

1:首先我們想要求長度為n的繩子剪掉后的最大乘積,可以從前面比n小的繩子轉移而來

2:用一個dp數組記錄從0到n長度的繩子剪掉后的最大乘積,也就是dp[i]表時長度為i的繩子剪成m段后的最大乘積,初始化dp[2]=1

3:我們把繩子剪掉第一段(長度為j),如果只減去1,對最后的乘積沒有任何增益,所以長度為2開始剪

4:剪了第一段后,剩下(i-j)長度可以不剪。如果不剪對應j*(i-j);如果剪去對應j*dp[i-j]。取兩者最大值max(j*(i-1),j * dp[i-j])

5:第一段長度j可以取的區間為[2),對所有j不同的情況取最大值,因此最終dp[i]的轉移方程為dp[i] = max(dp[i],j*max(dp[i-j],(i-j)))

class Solution { public:int cuttingRope(int n) {if(n<2) return 0;vector<int> dp(n+1);//當繩子長度為i時候可能的最大乘積為dp[i]//確定初始化條件dp[2]=1; //0跟1減沒有意義for(int i=3;i<=n;i++){for(int j=2;j<i;j++){ //j表示剪下來的繩子大小,當剪下1時候沒意義,所以從2開始//繩子有兩種方式,一種是剪下之后,剩下的再剪下最大為j*dp[i-j]//一種是剪下之后,剩下的不減了,剩的為j*(i-j);dp[i] = max(dp[i],j*max(dp[i-j],(i-j))); //里面一直跟之前的遍歷減過的結果比較 }}return dp[n];} };

總結

以上是生活随笔為你收集整理的LeetCode-剑指 Offer 14- I. 剪绳子的全部內容,希望文章能夠幫你解決所遇到的問題。

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