0-1背包
int main() {
int w[6] = { 0,5,4,7,2,6 }; //商品的体积
int v[6] = { 0,12,3,10,3,6 }; //商品的价值
int bagV =15; //背包大小
int dp[6][16] = { {0} };
for (int i = 1; i < 6; i++) {
for (int j = 1; j < 16; j++) {
if (j < w[i]) {
dp[i][j] = dp[i - 1][j];
}
else {
dp[i][j] = max(dp[i - 1][j],dp[i-1][j-w[i]]+v[i]);
}
}
}
for (int i = 1; i < 6; i++) {
for (int j = 1; j < 16; j++) {
cout << dp[i][j] << ' ';
}
cout << endl;
}
}
完全背包
int main() {
int w[6] = { 0,5,4,7,2,6 }; //商品的体积
int v[6] = { 0,12,3,10,3,6 }; //商品的价值
int bagV =15; //背包大小
int dp[6][16] = { {0} };
for (int i = 1; i < 6; i++) {
for (int j = 1; j < 16; j++) {
dp[i][j] = dp[i - 1][j];
int tem = j / w[i];
for (int k = 1; k <= tem; k++) {
dp[i][j] = max(dp[i][j], dp[i - 1][j - k*w[i]] + k*v[i]);
}
}
}
for (int i = 1; i < 6; i++) {
for (int j = 1; j < 16; j++) {
cout << dp[i][j] << ' ';
}
cout << endl;
}
}
多重背包
int main() {
int w[6] = { 0,5,4,7,2,6 }; //商品的体积
int v[6] = { 0,12,3,10,3,6 }; //商品的价值
int bagV =15; //背包大小
int dp[6][16] = { {0} };
int num[6] = { 0, 2, 4, 1, 5, 3 }; //每种商品的数目限制
for (int i = 1; i < 6; i++) {
for (int j = 1; j < 16; j++) {
dp[i][j] = dp[i - 1][j];
int tem = j / w[i];
tem = min(tem, num[i]);
for (int k = 1; k <= tem; k++) {
dp[i][j] = max(dp[i][j], dp[i - 1][j - k*w[i]] + k*v[i]);
}
}
}
for (int i = 1; i < 6; i++) {
for (int j = 1; j < 16; j++) {
cout << dp[i][j] << ' ';
}
cout << endl;
}
}