動態規劃 揹包問題

2022-09-12 10:15:16 字數 1299 閱讀 5177

**:

動態規劃0-1揹包問題

ø問題描述:

給定n種物品和一揹包。物品i的重量是wi,其價值為vi,揹包的容量為c。問應如何選擇裝入揹包的物品,使得裝

入揹包中物品的總價值最大?

ø對於一種物品,要麼裝入揹包,要麼不裝。所以對於一種物品的裝入狀態可以取0和1.我們設物品i的裝入狀態為xi,xi∈ (0,1),此問題稱為0-11揹包問題。

過程分析

資料:物品個數n=5,物品重量w[n]=,物品價值v[n]=,

(第0位,置為0,不參與計算,只是便於與後面的下標進行統一,無特別用處,也可不這麼處理。)總重量c=10.

ø揹包的最大容量為10,那麼在設定陣列m大小時,可以設行列值為6和11,那麼,對於m(i,j)就表示可選物品為i…n揹包容量為j(總重量)時揹包中所放物品的最大價值。

在得到在給定總重量時可以獲得的最大value後,如何得到具體該放入哪些物品?也就是構造最優解的過程:

下面是自己寫的原始碼:

[cpp]view plain

copy

print

?#include

#include

#include

#include

#include

#include

using namespace std;  

const int c = 10;             //揹包的容量  

const int w = ;//物品的重量,其中0號位置不使用 。   

const int v = ;//物品對應的待加,0號位置置為空。  

const int n = sizeof(w)/sizeof(w[0]) - 1 ; //n為物品的個數   

int x[n+1];  

void package0_1(int m[11],const int w,const int v,const int n)//n代表物品的個數   

void answer(int m[11],const int n)  

x[n] = m[i][j] ? 1 : 0;   

}  int main()  

;  package0_1(m,w,v,n);  

for(int i = 0; i <= 5; i++)  

answer(m,n);  

cout <

for(int i = 1; i <= 5; i++)  

cout <

system("pause");  

return 0;  

動態規劃 揹包問題

給定n個物品,重量是,價值是,包的容量 承重 是w 問,放入哪些物品能使得包內價值最大 1 需要將問題轉化為子問題,通過遞迴實現,且子問題必然與父問題存在關聯 2 定義v i,j 表示為,當item取自前i個items且揹包capacity j 時,揹包問題的最優解,也即最高的價值。3 從前i個it...

動態規劃 揹包問題

不廢話,直接上 動態規劃,揹包問題。輸入為 int n 物品的種類數。int n weight 各件物品的重量。int n value 各種物品的價值。int w 揹包最大的裝載重量。輸出 v n b 的值,最大的裝載價值。x n 各類物品的裝載數量。author huangyongye publi...

動態規劃 揹包問題

1 開心的金明 問題描述 金明今天很開心,家裡購置的新房就要領鑰匙了,新房裡有一間他自己專用的很寬敞的房間。更讓他高興的是,媽媽昨天對他說 你的房間需要購買哪些物品,怎麼布置,你說了算,只要不超過n 元錢就行 今天一早金明就開始做預算,但是他想買的東西太多了,肯定會超過媽媽限定的n 元。於是,他把每...