国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當(dāng)前位置: 首頁 > news >正文

深圳app開發(fā)公司哪家服務(wù)好巢湖seo推廣

深圳app開發(fā)公司哪家服務(wù)好,巢湖seo推廣,共享備案網(wǎng)站,無錫網(wǎng)站建設(shè)多少錢題目來源:https://leetcode.cn/problems/partition-equal-subset-sum/description/ C題解(思路來源代碼隨想錄) : 背包問題有多種背包方式,常見的有:01背包、完全背包、多重背包、分組背包和混合背包等等?!?article class="baidu_pl">

題目來源:https://leetcode.cn/problems/partition-equal-subset-sum/description/

C++題解(思路來源代碼隨想錄) :

背包問題有多種背包方式,常見的有:01背包、完全背包、多重背包、分組背包和混合背包等等。一個商品如果可以重復(fù)多次放入是完全背包,而只能放入一次是01背包,本題中是01背包。

把01背包問題套到本題上來。

  • 背包的體積為sum / 2
  • 背包要放入的商品(集合里的元素)重量為元素的數(shù)值,價值也為元素的數(shù)值
  • 背包如果正好裝滿,說明找到了總和為 sum / 2 的子集。
  • 背包中每一個元素是不可重復(fù)放入。

以上分析完,我們就可以套用01背包,來解決這個問題了。

  1. 確定dp數(shù)組以及下標(biāo)的含義。二維數(shù)組: dp[i][j]表示從下標(biāo)為[0-i]的物品里任意取,放進(jìn)容量為j的背包,價值總和最大是多少。
  2. 確定遞推公式。兩種情況:不放物品i:由dp[i - 1][j]推出,即背包容量為j,里面不放物品i的最大價值,此時dp[i][j]就是dp[i - 1][j]。(其實(shí)就是當(dāng)物品i的重量大于背包j的重量時,物品i無法放進(jìn)背包中,所以背包內(nèi)的價值依然和前面相同。);放物品i:由dp[i - 1][j - weight[i]]推出,dp[i - 1][j - weight[i]] 為背包容量為j - weight[i]的時候不放物品i的最大價值,那么dp[i - 1][j - weight[i]] + value[i] (物品i的價值),就是背包放物品i得到的最大價值。所以遞歸公式: dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i])。
  3. dp數(shù)組初始化。一定要和dp數(shù)組的定義吻合,否則到遞推公式的時候就會越來越亂。首先從dp[i][j]的定義出發(fā),如果背包容量j為0的話,即dp[i][0],無論是選取哪些物品,背包價值總和一定為0。狀態(tài)轉(zhuǎn)移方程可以看出i 是由 i-1 推導(dǎo)出來,那么i為0的時候就一定要初始化,即i為0,存放編號0的物品的時候,各個容量的背包所能存放的最大價值。當(dāng) j < weight[0]的時候,dp[0][j] 應(yīng)該是 0;當(dāng)j >= weight[0]時,dp[0][j] 應(yīng)該是value[0]。
  4. 確定遍歷順序。有兩個遍歷的維度:物品與背包重量。都可以! 但是先遍歷物品更好理解
  5. 舉例推導(dǎo)dp數(shù)組。
class Solution {
public:bool canPartition(vector<int>& nums) {int len = nums.size();int sum = 0;for(int i = 0; i < len; i++) {sum += nums[i];}if(sum % 2 == 1) return false;vector<vector<int>> dp(len, vector<int>(sum/2+1, 0));for(int ii = nums[0]; ii <= sum/2; ii++) {dp[0][ii] = nums[0];}// 相當(dāng)于包容量為sum/2,在len個物品中挑選,能裝滿則返回true。// 表示從0-j的元素中,取出和小于k的最大值。for(int j = 1; j < len; j++) {for(int k = 0; k <= sum/2; k++) {if(k < nums[j]) dp[j][k] = dp[j-1][k];else dp[j][k] = max(dp[j-1][k], dp[j-1][k-nums[j]]+nums[j]);}}if(dp[len-1][sum/2] == sum/2) return true;else return false;}
};

# 使用一維dp數(shù)組(滾動數(shù)組)

在使用二維數(shù)組的時候,遞推公式:dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i]);

其實(shí)可以發(fā)現(xiàn)如果把dp[i - 1]那一層拷貝到dp[i]上,表達(dá)式完全可以是:dp[i][j] = max(dp[i][j], dp[i][j - weight[i]] + value[i]);

與其把dp[i - 1]這一層拷貝到dp[i]上,不如只用一個一維數(shù)組了,只用dp[j](一維數(shù)組,也可以理解是一個滾動數(shù)組)。這就是滾動數(shù)組的由來,需要滿足的條件是上一層可以重復(fù)利用,直接拷貝到當(dāng)前層。

在一維dp數(shù)組中,dp[j]表示:容量為j的背包,所背的物品價值可以最大為dp[j]。

注意:遍歷順序必須先遍歷物品再遍歷包容量,且更新內(nèi)層for循環(huán)需要遞減(從后往前),因?yàn)闈L動數(shù)組的更新需要用到未更新的前面元素,如果是遞增(從前往后),前面更新的元素會影響后面的元素。

class Solution {
public:bool canPartition(vector<int>& nums) {int sum = 0;// dp[i]中的i表示背包內(nèi)總和// 題目中說:每個數(shù)組中的元素不會超過 100,數(shù)組的大小不會超過 200// 總和不會大于20000,背包最大只需要其中一半,所以10001大小就可以了vector<int> dp(10001, 0);for (int i = 0; i < nums.size(); i++) {sum += nums[i];}// 也可以使用庫函數(shù)一步求和// int sum = accumulate(nums.begin(), nums.end(), 0);if (sum % 2 == 1) return false;int target = sum / 2;// 開始 01背包for(int i = 0; i < nums.size(); i++) {for(int j = target; j >= nums[i]; j--) { // 每一個元素一定是不可重復(fù)放入,所以從大到小遍歷dp[j] = max(dp[j], dp[j - nums[i]] + nums[i]);}}// 集合中的元素正好可以湊成總和targetif (dp[target] == target) return true;return false;}
};

http://aloenet.com.cn/news/35292.html

相關(guān)文章:

  • 莆田網(wǎng)站建設(shè)哪家好什么是全網(wǎng)營銷推廣
  • 263企業(yè)郵箱登錄入口首頁上海seo公司哪家好
  • 買源碼做網(wǎng)站靠譜嗎網(wǎng)絡(luò)公司網(wǎng)絡(luò)推廣服務(wù)
  • 社會保險業(yè)務(wù)網(wǎng)站百度指數(shù)app官方下載
  • 東莞外貿(mào)公司建網(wǎng)站業(yè)務(wù)推廣方式
  • 發(fā)布個人免費(fèi)網(wǎng)站的一般流程圖重慶seo公司排名
  • app展示網(wǎng)站軟件排名優(yōu)化
  • 金華網(wǎng)站開發(fā)公司北京seo邢云濤
  • 西地那非片有依賴性嗎湘潭seo快速排名
  • 做物理的網(wǎng)站企業(yè)如何進(jìn)行網(wǎng)絡(luò)營銷
  • 甘肅省建設(shè)廳質(zhì)量投訴網(wǎng)站武漢百度seo網(wǎng)站優(yōu)化
  • 建網(wǎng)站是什么專業(yè)類別寧德市高中階段招生信息平臺
  • 網(wǎng)站建設(shè)計(jì)劃表模板下載百度指數(shù)數(shù)據(jù)分析平臺
  • 豐寧縣有做網(wǎng)站的嗎?站長申論
  • 設(shè)置wordpress上傳文件大小限制西安網(wǎng)站優(yōu)化培訓(xùn)
  • 公司做網(wǎng)站 要準(zhǔn)備哪些素材電話營銷
  • 響應(yīng)式網(wǎng)站寬度如何做網(wǎng)站
  • led外貿(mào)網(wǎng)站制作小程序開發(fā)制作
  • 江西建設(shè)職業(yè)技術(shù)學(xué)院招生信息網(wǎng)站如何統(tǒng)計(jì)網(wǎng)站訪問量
  • 網(wǎng)站標(biāo)題優(yōu)化技巧超級軟文網(wǎng)
  • 做海南旅游網(wǎng)站的初衷友情鏈接seo
  • 企業(yè)網(wǎng)站建設(shè)技術(shù)小程序開發(fā)系統(tǒng)
  • 做黑網(wǎng)站賺錢嗎濱州網(wǎng)站建設(shè)
  • 學(xué)生怎樣做網(wǎng)站安卓優(yōu)化大師
  • 四川今天公布疫情新情況seo模擬點(diǎn)擊軟件
  • 可以發(fā)布廣告的網(wǎng)站鄭州關(guān)鍵詞優(yōu)化顧問
  • 福州企業(yè)做網(wǎng)站精準(zhǔn)客源推廣引流
  • php做商城網(wǎng)站上海做網(wǎng)絡(luò)口碑優(yōu)化的公司
  • 自己建私人網(wǎng)站做外貿(mào)不好做濟(jì)南網(wǎng)站建設(shè)制作
  • 隴西學(xué)做網(wǎng)站湖北搜索引擎優(yōu)化