動態規劃之0 1揹包問題

2021-07-11 10:23:50 字數 914 閱讀 8526

問題描述

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的...