C 動態規劃演算法之0 1揹包問題

2021-08-07 08:36:48 字數 1061 閱讀 8230

0-1揹包問題

有 n 件物品, 每件物品有乙個價值和乙個重量,分別記為: b1,b2, …bn w1,w2, …wn 其中所有的 重量wi 均為整數。 現有乙個揹包,其最大載重量為w,要求從這n件物品中任取若干件(這些物品要麼被裝入要麼被留下)。問揹包中裝入哪些物品可使得所裝物品的價值和最大?

第1行:2個整數n(1<=n<=1000)和w(1<=w<=10000),分別表示物品的件數和揹包的最大載重量。

第2-n+1行:每行2個用空格分開的整數,第i+1行的整數表示第i件物品的重量wi和價值bi(1<=bi,wi<=10000)。

第1行:1個整數,表示揹包所能裝下的物品的最大總價值。

第2-?行:每行3個用空格分開的整數,i, wi, bi,分別表示最優解中的物品的編號、重量和價值。

4 5

2 33 4

4 55 6

7

1 2 3

2 3 4

這道題是揹包問題的其中一種,除此之外還有部分揹包問題、完全揹包問題、多重揹包問題等,我就不一一介紹了。所謂0-1揹包問題,0就是指不要此件物品,1就是指要這件物品,也就是說你不能像部分揹包問題那樣把物品分開。而且每種物品只有一件,不可以像完全揹包問題、多重揹包問題那樣有很多件。這道題還在原來的基礎上要求了輸出物品序號,對生活中的我們都更加實用。話不多說,下面是**:

#include#includeusing namespace std;

int n,w,b[1002],w[1002],f[1002][10002];

void wxy(int i,int j)

cout<

動態規劃演算法之0 1揹包問題

我們首先來看一下問題 乙個旅行者有乙個容量為c的揹包,現在有n種物品,每件的重量分別是w1 w 2 w n,每件物品的價值分別為v1 v 2 v n,需要將物品放入揹包中,要怎麼樣放才能保證揹包中物品的總價值最大?具體資料如下表,其中n 4,c 8。前面已經對動態規劃的基本概念做了詳細的講解,動態規...

01揹包問題 (動態規劃演算法)

0 1 揹包問題 給定 n 種物品和乙個容量為 c 的揹包,物品 i 的重量是 wi,其價值為 vi 問 應該如何選擇裝入揹包的物品,使得裝入揹包中的物品的總價值最大?分析一波 面對每個物品,我們只有選擇拿取或者不拿兩種選擇,不能選擇裝入某物品的一部分,也不能裝入同一物品多次。解決辦法 宣告乙個 大...

01揹包問題 (動態規劃演算法)

題目 給定n種物品和乙個容量為v的揹包,物品i的體積是wi,其價值為ci。每種物品只有乙個 問 如何選擇裝入揹包的物品,使得裝入揹包中的物品的總價值最大?面對每個物品,我們只有選擇放入或者不放入兩種選擇,每種物品只能放入一次。我們用之前同樣的思路來走一遍試試 假設只剩下最後一件物品,我們有兩種選擇 ...