問題描述:有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 ...