給定n
種物品和一揹包。物品
i的重量是
wi,其價值為
vi,揹包的容量為
c。問應如何選擇裝入揹包的物品,使得裝入揹包中物品的總價值最大?
整個解的空間相當於乙個二叉樹,左邊是0,代表不取這個物品,右邊是1,代表取這個物品,然後進行dfs,回溯的時候修改。
注意,這裡應該有兩個剪枝,我這裡只寫了乙個。
#include#include#includeusing namespace std;
int n,totcap,bestval;//物品的個數,揹包的容量,最大價值
const int n=1000;
int val[n],w[n],x[n],bestx[n];//物品的價值,物品的重量,x[i]暫存物品的選中情況,物品的選中情況
void dfs(int i,int cv,int cw)
}else
for(int j=0;j<=1;j++)
}}int main()
{ int i;
bestval=0;
cout<<"請輸入揹包最大容量:"<>totcap;
cout<<"請輸入物品個數:"<>n;
cout<<"請依次輸入物品的重量:"<>w[i];
cout<<"請依次輸入物品的價值:"<>val[i];
dfs(1,0,0);
cout<<"最大價值為:"<
回溯法解0 1揹包問題(王曉東演算法例題)
給定n種物品和一揹包。物品i的重量是wi,其價值為vi,揹包的容量為c。問應如何選擇裝入揹包的物品,使得裝入揹包中物品的總價值最大?整個解的空間相當於乙個二叉樹,左邊是0,代表不取這個物品,右邊是1,代表取這個物品,然後進行dfs,回溯的時候修改。注意,這裡應該有兩個剪枝,我這裡只寫了乙個。incl...
回溯法解01揹包問題
關於回溯法的概念,這篇文章講的比較通俗易懂 package com.zxg.algorithm.backtrack 回溯法解01揹包問題 揹包問題的概念不再贅述。這裡主要講解下回溯法思路。將每乙個物品分為裝載和不裝載兩條路徑,乙個接乙個的遍歷,每遍歷乙個物品就會產生兩條分支 那麼就會組成一棵樹,深度...
演算法 回溯法 0 1揹包問題
fishing pan 回溯法是一種非常有效的方法,有 通用的解題法 之稱。它有點像窮舉法,但是更帶有跳躍性和系統性,他可以系統性的搜尋乙個問題的所有的解和任一解。回溯法採用的是深度優先策略。回溯法解決問題一般分為三個步驟 1 針對所給問題,定義問題的解空間 2 確定易於搜尋的解空間結構 3 以深度...