DFS 揹包問題(C 實現)

2021-10-06 15:38:05 字數 795 閱讀 5951

問題描述:有n件物品,每件物品的重量為w[i],價值為c[i]。現在需要選出若干件物品放入乙個容量為v的揹包中,使得在選入揹包的物品重量在不超過容量v的前提下,讓揹包中物品的價值之和最大,求最大價值。(1≤n≤20)

解題思路:深度優先遍歷 + 遞迴實現,對於每乙個物品都存在選和不選兩種情況,每種情況下,更新最大價值,直到遍歷完所有的物品。

#define _crt_secure_no_warnings

#include

#include

using

namespace std;

int n;

// 物品件數

int v;

// 揹包容量

int maxvalue =0;

// 最大價值

vector<

int>w(

20);// w[i]:每件物品的重量

vector<

int>c(

20);// c[i]:每件物品的價值

void

dfs(

int index,

int sumw,

int sumc)

}int

main()

輸入舉例:

4

201054

7402020

5

輸出:

80
讀者可自行設定答案,檢查輸出是否正確。

謝謝閱讀。

參考《演算法筆記》

DFS寫揹包問題

dfs解決揹包問題 include 用深搜寫 using namespace std int weight,maxvalue 0,n 揹包中能放物品的總質量weight,最大價值maxvalue,總的物品數量 int v 30 w 30 物品的數量和價值 void dfs int index,int...

DFS解決01揹包問題

本篇博文著重用dfs解決著名的揹包問題 01揹包問題要點在 選與不選。所以我們很容易聯想到dfs來解決這個問題!下面我們來看看是如何實現的 includeusing namespace std const int n 30 int w n value n n,maxvalue 0,v void df...

揹包問題(dfs剪枝優化)

時間複雜度指數級 剪枝操作確實可以減去數倍的計算時間 clock t start1,finish1,start2,finish2 double duration1,duration2 const int maxn 40 int n,v,maxvalue 0 物品件數,揹包容量,最大價值 int w ...