分組揹包問題:已知乙個體積為m的揹包,共有n種物品,每一種物品有s個,每個的體積v和權值w不一定相同,要求從每一種物品中選某件物品,使得在總體積不超過m的情況下,所選的總權值最大。
**如下(已優化成一維滾動陣列)
#include #include #define n 110
using namespace std;
int n, m;
int s[n], v[n][n], w[n][n];
int f[n];
int main()
}for (int i = 1; i <= n; i++) // 列舉所有種類
for (int j = m; j >= 0; j--) // 列舉所有體積
for (int k = 1; k <= s[i]; k++ ) // 列舉所有選項
if(v[i][k] <= j) // 只有在這個條件下,需要進行狀態轉移
f[j] = max (f[j], f[j - v[i][k]] + w[i][k]);
cout << f[m] << endl;
return 0;
}
分組揹包問題
有 n nn 組物品和乙個容量是 v vv 的揹包。每組物品有若干個,同一組內的物品最多只能選乙個。每件物品的體積是 vij v vi j 價值是 wij w wi j 其中 i ii 是組號,j jj 是組內編號。求解將哪些物品裝入揹包,可使物品總體積不超過揹包容量,且總價值最大。輸出最大價值。輸...
分組揹包問題
有 n 組物品和乙個容量是 v 的揹包。每組物品有若干個,同一組內的物品最多只能選乙個。每件物品的體積是 vij,價值是 wij,其中 i 是組號,j 是組內編號。求解將哪些物品裝入揹包,可使物品總體積不超過揹包容量,且總價值最大。輸出最大價值。輸入格式 第一行有兩個整數 n,v,用空格隔開,分別表...
分組揹包問題
分組揹包問題 有 n 組物品和乙個容量是 v 的揹包。每組物品有若干個,同一組內的物品最多只能選乙個。每件物品的體積是 vij,價值是 wij,其中 i 是組號,j 是組內編號。求解將哪些物品裝入揹包,可使物品總體積不超過揹包容量,且總價值最大。輸出最大價值。輸入格式 第一行有兩個整數 n,v,用空...