.了解揹包問題:
《講解鏈結1>
《講解鏈結2>
.0/1揹包:
《講解鏈結》
《板子題》
題目描述:
乙個旅行者有乙個最多能用 m 公斤的揹包,現在有 n 件物品,它們的重量分別是 w1 ,w2 ,… , wn ,它們的價值分別為 c1,c2 ,… ,cn 。若每種物品只有一件求旅行者能獲得最大總價值。
輸入格式:
第 1 行:兩個整數,m(揹包容量,m≤200)和 n(物品數量,n≤30)。
第 2..n+1 行:每行二個整數 wi,ci,表示每個物品的重量和價值。
輸出格式:
僅一行,乙個數,表示最大總價值。
樣例資料 1
輸入:
10 4
2 1
3 3
4 5
7 9輸出:
12**(優化過後):
#include
using
namespace
std;
int n,m;
int w[505],v[505];
int f[505];
int main()
.完全揹包
《講解鏈結》
《板子題》
題目描述:
設有 n 種物品,每種物品有乙個重量及乙個價值。但每種物品的數量是無限的,同時有乙個揹包,最大載重量為 m ,今從 n 種物品中選取若干件(同一種物品可以多次選取),使其重量的和小於等於 m ,而價值的和為最大。
輸入格式:
第 1 行:兩個整數,m(揹包容量,m<=200)和 n(物品數量,n<=200)。
第 2..n+1 行:每行二個整數 wi,ci,表示每個物品的重量和價值。
輸出格式:
僅一行,乙個數,表示最大總價值。
樣例資料 1
輸入:
12 4
2 1
3 3
4 5
7 9輸出
15**:
#include
using
namespace
std;
int n,m;
int w[505],v[505];
int f[505];
int main()
.二維揹包
個人理解:類似一維的揹包問題,只不過要開二維陣列,多乙個考慮條件,多一層for迴圈。
《講解鏈結》
例題:hdu 2159 – fate
題目描述:
最近xhd正在玩一款叫做fate的遊戲,為了得到極品裝備,xhd在不停的殺怪做任務。久而久之xhd開始對殺怪產生的厭惡感,但又不得不通過殺怪來公升完這最後一級。現在的問題是,xhd昇掉最後一級還需n的經驗值,xhd還留有m的忍耐度,每殺乙個怪xhd會得到相應的經驗,並減掉相應的忍耐度。當忍耐度降到0或者0以下時,xhd就不會玩這遊戲。xhd還說了他最多隻殺s只怪。請問他能昇掉這最後一級嗎?
輸入格式:
輸入資料有多組,對於每組資料第一行輸入n,m,k,s(0 < n,m,k,s < 100)四個正整數。分別表示還需的經驗值,保留的忍耐度,怪的種數和最多的殺怪數。接下來輸入k行資料。每行資料輸入兩個正整數a,b(0 < a,b < 20);分別表示殺掉乙隻這種怪xhd會得到的經驗值和會減掉的忍耐度。(每種怪都有無數個)
輸出格式:
輸出公升完這級還能保留的最大忍耐度,如果無法公升完這級輸出-1。
樣例資料 1
輸入:
10 10 1 10
1 1
10 10 1 9
1 1
9 10 2 10
1 1
2 2輸出:
0 -1
1**:
#include
#include
#include
#include
#include
#include
using
namespace
std;
int n,m,k,s;
int a[505],b[505];
int f[505][505];
inline
void work()
}if(f[x][s]>=n)
break;
}if(x>m) cout
<<"-1"
cout
return
0;}
.多重揹包
《講解鏈結》
.分組揹包
《講解鏈結》
.揹包問題總結
《鏈結.經典揹包九講》
1.hdu 2955 robberies 01揹包
2.hdu 1864 最大報銷額 01揹包
3.hdu 2602 bone collector 01揹包
4.hdu 2844 coins 多重揹包
5.hdu 2159 fate 二維揹包/完全揹包
6.hdu 1712 acboy needs your help 分組揹包
揹包dp整理
01揹包 動態規劃是一種高效的演算法。在數學和電腦科學中,是一種將複雜問題的分成多個簡單的小問題思想 分而治之。因此我們使用動態規劃的時候,原問題必須是重疊的子問題。運用動態規劃設計的演算法比一般樸素演算法高效很多,因為動態規劃不會重複計算已經計算過的子問題。因為動態規劃又可以稱為 記憶化搜尋 01...
揹包問題 01揹包問題
n個物品,總體積是v,每個物品的體積的vi,每個物品的最大價值是wi,在不超過v的體積下求最大價值 eg揹包容積為 5 物品數量為 4 物品的體積分別為 物品的價值分別為 思路定義乙個二位陣列int f new int n 1 v 1 f i j 就表示在1 i個物品中選取體積小於v的情況的最大價值...
01揹包問題 完全揹包問題 多重揹包問題
0 1 揹包問題 給定 n 種物品和乙個容量為 c 的揹包,物品 i 的重量是 wi,其價值為 vi 問 應該如何選擇裝入揹包的物品,使得裝入揹包中的物品的總價值最大?分析一波,面對每個物品,我們只有選擇拿取或者不拿兩種選擇,不能選擇裝入某物品的一部分,也不能裝入同一物品多次。解決辦法 宣告乙個 大...