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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

《dp补卡——多重背包》

發(fā)布時(shí)間:2023/12/1 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《dp补卡——多重背包》 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

多重背包簡(jiǎn)介:
有N種物品和一個(gè)容量為V的背包。第i種物品最多有Mi件可用,每件耗費(fèi)的空間為Ci,價(jià)值為Wi。求解將哪些物品裝入背包可使得這些物品耗費(fèi)的空間總和不超過背包容量,且價(jià)值總和最大。
將Mi件攤開,就是一個(gè)01背包問題。
如下列兩表就是等價(jià)的,圖來源于代碼隨想錄。

void test_multi_pack() {vector<int> weight = {1,3,4};vector<int> value = {15,20,30};vector<int> nums = {2,3,2};int bagWeight = 10;//進(jìn)行展開,轉(zhuǎn)化為01背包問題for(int i = 0; i < nums.size(); i++){while(nums[i] > 1) {//nums[i]保留到1,把其他的多余的個(gè)數(shù)展開weight.push_back(weight[i]);value.push_back(value[i]);nums[i]--;}}vector<int> dp(bagWeight + 1, 0);for(int i = 0; i < weight.size(); i++) //遍歷物品{for(int j = bagWeight; j >= weight[i]; j--) //遍歷背包容量{dp[j] = max(dp[j],dp[j-weight[i]] + values[i])}}cout << dp[bagWeight] << endl; }

總結(jié)

以上是生活随笔為你收集整理的《dp补卡——多重背包》的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

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