問題描述
0−1揹包問題是應用動態規劃設計求解的典型例題
已知n種物品和乙個可容納c重量的揹包,物品i的重量為w[i],產生的效益為p[i]。在裝包時物品i可以裝入,也可以不裝,但不可拆開裝。
問如何裝包,所得裝包總效益最大。
演算法分析
最優子結構特性
0−1揹包的最優解具有最優子結構特性。
與一般揹包問題不同,0−1揹包問題要求 即物品i不能折開,或者整體裝入,或者不裝。當約定每件物品的重量與效益均為整數時,可用動態規劃求解。
按每一件物品裝包為乙個階段,共分為n個階段
1、建立遞推關係(先看最後乙個裝不裝)
設g(i,j)為揹包容量j,i可取物品範圍為:1,2,…,i的最大效益值。
(1)則當0≤j
#include#define n 50
using
namespace
std;
int main()
//初始化邊界條件
for (int i=1; i<=capacity; ++i)
//順推計算i是物品個數
for (int i=2; i<=n; ++i)
}cout
<< "the most power is: ";
cout
<< dp[n][capacity] << endl;
return
0;}
動態規劃之01揹包問題
首先是問題描述 給定n種物品和一揹包,物品i的重量是wi,其價值是pi,揹包的容量是m,問如何選擇裝入揹包中的物品總價值最大?可以這樣理解 揹包的揹負有上限,因此在這個上限內盡可能多的裝東西,並且價值越多越好。在這裡我之想討論動態規劃解決這個問題的詳細過程。動態規劃是用空間換時間的一種方法的抽象。其...
動態規劃之0 1揹包問題
問題描述 現有n件物品和乙個容量為c的揹包。第i件物品的重量是重量為w i 價值是v i 已知對於一件物品必須選擇取 用1表示 或者不取 用0表示 且每件物品只能被取一次 這就是 0 1 的含義 求放置哪些物品進揹包,可使這些物品的重量總和不超過揹包容量,且價值總和最大。求解思路 0 1揹包問題的遞...
動態規劃之01揹包問題
0 1揹包問題 一 問題描述 給定n種物品和一揹包。物品i的重量是wi,其價值為vi,揹包的容量為j。問應如何選擇裝入揹包的物品,使得裝 入揹包中物品的總價值最大?對於一種物品,要麼裝入揹包,要麼不裝。所以對於一種物品的裝入狀態可以取0和1,此問題稱為0 1揹包問題。有編號分別為a,b,c,d,e的...