c 實現0 1揹包問題完整原始碼(動態規劃實現)

2021-08-07 03:06:20 字數 1500 閱讀 9264

**:東風破的部落格

[cpp]

view plain

copy

#include 

#define max_num 5

#define max_weight 10

using

namespacestd; 

//動態規劃求解

intzero_one_pack(

inttotal_weight, 

intw, 

intv, 

intflag, 

intn) ; 

//c[i][j]表示前i個物體放入容量為j的揹包獲得的最大價值

// c[i][j] = max

//第i件物品要麼放,要麼不放

//如果第i件物品不放的話,就相當於求前i-1件物體放入容量為j的揹包獲得的最大價值

//如果第i件物品放進去的話,就相當於求前i-1件物體放入容量為j-w[i]的揹包獲得的最大價值

for(

inti = 1; i 

<= n; i++)  

else

else

} } 

} //下面求解哪個物品應該放進揹包

inti = n, j = total_weight; 

while(c[i][j] != 0)  

}returnc[n][total_weight]; 

} //回溯法求解

intmain() ; 

intv[4] = ; 

intflag[4]; 

//flag[i][j]表示在容量為j的時候是否將第i件物品放入揹包

inttotal_value = zero_one_pack(total_weight, w, v, flag, 3); 

cout 

<< 

"需要放入的物品如下"

<< endl; 

for(

inti = 1; i 

<= 3; i++)  

cout 

<< 

"總的價值為: "

<< total_value 

<< endl; 

return0; 

}  

01揹包問題 C

有i件物品和乙個容量為volume total的揹包。第n件物品的體積是c n 價值是w n 體積是指物品在揹包中佔據的位置,即放入的物品的總體積不能揹包總容量 每種物品僅有一件,可以選擇放或不放。求解將哪些物品裝入揹包可使價值總和最大。輸入物品的總個數i,和揹包的最大容積volume total ...

01揹包,完全揹包C 實現

首先,上自己的 由於 注釋詳細,我就不解釋啦。看 就好o o。轉換為了01揹包問題求解。部分演算法與測驗資料資料參照了 不了解01揹包演算法的同學也可以到上述 先學習。本 可以輸出價值與揹包中的物品。先為大家雙手奉上執行結果。define volumn 14 揹包總容量為volumn 1 defin...

回溯法 0 1揹包問題(C 實現)

概念 回溯法是一種非常有效的方法,有 通用的解題法 之稱。它有點像窮舉法,但是更帶有跳躍性和系統性,他可以系統性的搜尋乙個問題的所有的解和任一解。回溯法採用的是深度優先策略。三個步驟 針對所給問題,定義問題的解空間 確定易於搜尋的解空間結構 以深度優先的方式搜尋解空間。優化方法 搜尋過程使用剪枝函式...