動態規劃法求解0 1揹包問題

2021-10-04 12:48:03 字數 848 閱讀 8784

有n個重量分別為的物品,它們的價值分別為,給定乙個容量為w的揹包。

設計從這些物品中選取一部分物品放入該揹包的方案,每個物品要麼選中要麼不選中,要求選中的物品不僅能夠放到揹包中,而且重量和為w具有最大的價值。

對於可行的揹包裝載方案,揹包中物品的總重量不能超過揹包的容量。

最優方案是指所裝入的物品價值最高,即 v1x1+v2x2+…+vn*xn(其中xi取0或1,取1表示選取物品i)取得最大值。

在該問題中需要確定x1、x2、…、xn的值。假設按i=1,2,…,n的次序來確定xi的值,對應n次決策即n個階段。

設定二維動態規劃陣列dp,dp[i][r]表示揹包剩餘容量為r(1≤r≤w),已考慮物品1、2、…、i(1≤i≤n)時揹包裝入物品的最優價值。顯然對應的狀態轉移方程如下:

dp[i][0]=0(揹包不能裝入任何物品,總價值為0)

邊界條件dp[i][0]=0(1≤i≤n)―邊界條件

dp[0][r]=0(沒有任何物品可裝入,總價值為0)

邊界條件dp[0][r]=0(1≤r≤w)―邊界條件

dp[i][r]=dp[i-1][r] 當rint n =

5, w =10;

int w[maxn]=;

int v[maxn]=;

int dp[maxn]

[maxn]

;int x[maxn]

;int maxv;

void

knap()

}}void

bulidx()

else

x[i]=0

; i--;}

}knap()演算法中含有兩重for迴圈,所以時間複雜度為o(n×w),空間複雜度為o(n×w)。

0 1揹包問題 動態規劃法

問題描述 給定n種物品和一揹包。物品i的重量是w i 其價值為v i 揹包的容量為c。問應如何選擇裝入揹包的物品,使得裝入揹包中物品的總價值最大?分析 對於一種物品,要麼裝入揹包,要麼不裝。所以對於一種物品的裝入狀態可以取0和1。設物品i的裝入狀態為xi,xi 0,1 此問題稱為0 1揹包問題。資料...

0 1揹包問題 動態規劃法

問題描述 給定n種物品和一揹包。物品i的重量是w i 其價值為v i 揹包的容量為c。問應如何選擇裝入揹包的物品,使得裝入揹包中物品的總價值最大?分析 對於一種物品,要麼裝入揹包,要麼不裝。所以對於一種物品的裝入狀態可以取0和1。設物品i的裝入狀態為xi,xi 0,1 此問題稱為0 1揹包問題。資料...

動態規劃法 01揹包問題

一 幾個概念 最優化問題 有 n個輸入。它的解由這 n個輸入的乙個子集組成,這個子集必須滿足某些事先給定的條件。這些條件稱為約束條件。滿足約束條件的解稱為問題的可行解。滿足約束條件的可行解可能不止乙個,為了衡量這些可行解的優劣,事先給出一定的標準,這些標準通常以函式的形式給出。這些標準函式稱為目標函...