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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

最后一块石头的重量II

發(fā)布時(shí)間:2024/4/18 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 最后一块石头的重量II 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

題目鏈接https://leetcode-cn.com/problems/last-stone-weight-ii/

本題其實(shí)就是盡量讓石頭分成重量相同的兩堆,相撞之后剩下的石頭最小,這樣就化解成01背包問(wèn)題了

接下來(lái)進(jìn)行動(dòng)規(guī)五步曲:

確定dp數(shù)組以及下標(biāo)的含義

dp[j]表示容量為j的背包,最多可以背dp[j]這么重的石頭。

確定遞推公式

dp[j] = max(dp[j], dp[j - stones[i]] + stones[i]);

dp[j - stones[i]] + stones[i]中 又有- stones[i] 又有+stones[i],看著有點(diǎn)暈乎。

還是要牢記dp[j]的含義,要知道dp[j - stones[i]]為 容量為j - stones[i]的背包最大所背重量。

dp數(shù)組如何初始化

既然 dp[j]中的j表示容量,那么最大容量(重量)是多少呢,就是所有石頭的重量和。

而我們要求的target其實(shí)只是最大重量的一半,所以可以把石頭遍歷一遍,計(jì)算出石頭總重量 然后除2,得到dp數(shù)組的大小。

接下來(lái)就是如何初始化dp[j]呢,因?yàn)橹亓慷疾粫?huì)是負(fù)數(shù),所以dp[j]都初始化為0就可以了,這樣在遞歸公式dp[j] = max(dp[j], dp[j - stones[i]] + stones[i]);中dp[j]才不會(huì)被初始值所覆蓋。

代碼為:vector<int> dp(target+1,0);

確定遍歷順序

如果使用一維dp數(shù)組,物品遍歷的for循環(huán)放在外層,遍歷背包的for循環(huán)放在內(nèi)層,且內(nèi)層for循環(huán)倒敘遍歷!

for(auto weight : stones){for(int ii=target;ii>=weight;ii--){dp[ii]=max(dp[ii],dp[ii-weight]+weight);}}

舉例推導(dǎo)dp數(shù)組

舉例,輸入:[2,4,1,1],此時(shí)target = (2 + 4 + 1 + 1)/2 = 4 ,dp數(shù)組狀態(tài)圖如下:


最后dp[target]里是容量為target的背包所能背的最大重量。

那么分成兩堆石頭,一堆石頭的總重量是dp[target],另一堆就是sum - dp[target]。

在計(jì)算target的時(shí)候,target = sum / 2 因?yàn)槭窍蛳氯≌?#xff0c;所以sum - dp[target] 一定是大于等于dp[target]的。

那么相撞之后剩下的最小石頭重量就是 (sum - dp[target]) - dp[target]。

以上分析完畢,C++代碼如下:

時(shí)間復(fù)雜度:O(m * n) , m是石頭總重量(準(zhǔn)確的說(shuō)是總量的一半),n為石頭塊數(shù) 空間復(fù)雜度:O(m) class Solution { public:int lastStoneWeightII(vector<int>& stones) {int sum=0;for(auto w : stones) sum+=w;int target=sum/2;vector<int> dp(target+1,0);for(auto weight : stones){for(int ii=target;ii>=weight;ii--){dp[ii]=max(dp[ii],dp[ii-weight]+weight);}}return (sum-dp[target])-dp[target];} }; 與50位技術(shù)專家面對(duì)面20年技術(shù)見(jiàn)證,附贈(zèng)技術(shù)全景圖

總結(jié)

以上是生活随笔為你收集整理的最后一块石头的重量II的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。