1.
現有4個揹包,已知每個物品的體積和價值,每個揹包最多容納10個體積的物品,每件物品只能拿一次,問怎麼樣裝使揹包的價值最大?
分析:
(1)二維陣列求法:
如果包的體積由0變化到10,每次物品只能放一次,則包內所放物品的價值量為:
則包所放的最大價值即二維陣列的最後乙個值;
**如下:
#include using namespace std;
#define n 4//為揹包的個數
struct b[n+1];
void read ()
cout<
return a;
else
return b;
}void function()
;//將二維陣列優化為一位陣列
(2)優化為一維陣列:
分析:將二維陣列變為一維陣列,即在上面二維陣列的每一行的基礎上計算下一行的價值,則最後一行的資料的最後乙個值為最大價值;
**如下:
#include using namespace std;
#define n 4//為揹包的個數
struct b[n+1];
void read ()
cout<
return a;
else
return b;
}void function()
;//將二維陣列優化為一位陣列
int i,j;
cout<
a[j]=max(a[j],a[j-b[i].v]+b[i].w);//求的是每一行是如何分配的,最大體積時所選擇得到的價值是最大價值
該題還可以用遞迴方法來解決;
部分揹包問題
描述給定乙個最大容量為m公斤的揹包和n種食品,有食鹽白糖大公尺等。已知第i種食品價值為每公斤vi元 有wi公斤,程式設計確定乙個方案 使揹包中食品總價值最大 輸入 輸入m,n n種食品的vi,wi 1 m n 1000 1 wi,vi 1000 輸出 揹包的最大價值 樣例輸入1 複製3 3 10 3...
部分揹包問題
給定 n 個物品和乙個容量為c的揹包,物品 i 的重量是w,其價值是v,揹包問題是如何選擇裝入揹包的物品使得裝入揹包中的物品總價值最大。與0 1揹包問題的區別 在部分揹包問題中物品可以部分裝入,但不能重複裝入揹包 使用貪心演算法解決該問題的關鍵是如何確定貪心策略。舉例一下幾種貪心策略 根據如何選出最...
部分揹包問題
uog up 2240 luogu p2240 luogup 2240 阿里巴巴走進了裝滿寶藏的藏寶洞。藏寶洞裡面有 n n 100 n n le 100 n n 10 0 堆金幣,第 i ii 堆金幣的總重量和總價值分別是 mi,vi 1 mi,vi 100 m i,v i 1 le m i,v ...