揹包問題是動態規劃中的經典問題,這裡以洛谷上的一道題開心的金明為例,展示幾種解法。
1.深度優先搜尋(複雜度很高)
#include #include #include using namespace std;
struct mono;
vectorm;
int allvmax=0;
int v,n;
void dfs (int t,int sum,int sumv)
for (int i=0;i> v >>n;
mono s;
for (int i=1;i<=n;i++)
dfs(0,0,v);
cout << allvmax;
return 0;
}
2.記憶化搜尋
#include #include #include using namespace std;
int va[26]=;int im[26]=;
int dfs[26][60000];
int main()
for (int i=n;i>=1;i--)
else
dfs[i][t]=dfs[i+1][t];}}
cout << dfs[1][v];
return 0;
}
3.記憶化搜尋的一維陣列優化
#include #include #include using namespace std;
int va[26]=;int im[26]=;
int dfs[26][60000];
int main()
for (int i=n;i>=1;i--)
else
dfs[i][t]=dfs[i+1][t];}}
cout << dfs[1][v];
return 0;
}
例9 11 01揹包問題
時間限制 1000 ms 記憶體限制 65536 kb 乙個旅行者有乙個最多能裝m公斤的揹包,現在有n件物品,它們的重量分別是w1,w2,wn,它們的價值分別為c1,c2,cn,求旅行者能獲得最大總價值。第一行 兩個整數,m 揹包容量,m 200 和n 物品數量,n 30 第2.n 1行 每行二個整...
揹包問題 01揹包與完全揹包
一 介紹 揹包問題是最廣為人知的動態規劃問題,都是給定限定的揹包容量與物品,求所能裝下的最大價值 完全揹包 有n種物品,每種均有無限多,第i種物品額體積為v i 重量 價值 為w i 01揹包 有n種物品,每種只有乙個,第i種物品額體積為v i 重量 價值 為w i 在揹包問題中,我們把不同種的物品...
1268 例9 12 完全揹包問題
題目描述 設有n種物品,每種物品有乙個重量及乙個價值。但每種物品的數量是無限的,同時有乙個揹包,最大載重量為m,今從n種物品中選取若干件 同一種物品可以多次選取 使其重量的和小於等於m,而價值的和為最大。輸入 第一行 兩個整數,m 揹包容量,m 200 和n 物品數量,n 30 第2 n 1行 每行...