有编号分别为a,b,c,d,e的五件物品,它们的重量分别是2,2,6,5,4,它们的价值分别是6,3,5,4,6,现在给你个承重为10的背包,如何让背包里装入的物品具有最大的价值总和?
name | weight | value | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
a | 2 | 6 | 0 | 6 | 6 | 9 | 9 | 12 | 12 | 15 | 15 | 15 |
b | 2 | 3 | 0 | 3 | 3 | 6 | 6 | 9 | 9 | 9 | 10 | 11 |
c | 6 | 5 | 0 | 0 | 0 | 6 | 6 | 6 | 6 | 6 | 10 | 11 |
d | 5 | 4 | 0 | 0 | 0 | 6 | 6 | 6 | 6 | 6 | 10 | 10 |
e | 4 | 6 | 0 | 0 | 0 | 6 | 6 | 6 | 6 | 6 | 6 | 6 |
#include <stdio.h>
#include <stdlib.h>
using namespace std;
int main(){
int n = 5;
int zonghe = 10;
int w[] = { 0, 4, 5, 6, 2, 2 };
int v[] = { 0, 6, 4, 5, 3, 6 };
int table[6][11];
for (int i = 0; i < 11; i++){
table[0][i] = 0;
if (i < 6)table[i][0] = 0;
}
for (int i = 1; i < 11; i++){
for (int j = 1; j < 6; j++){
if (i >= w[j]){
int a = table[j - 1][i];
int b = table[j - 1][i - w[j]] + v[j];
table[j][i] = a>b ? a : b;
}
else{
table[j][i] = table[j - 1][i];
}
}
}
for (int i = 0; i < 6; i++){
for (int j = 0; j < 11; j++){
printf("%4d", table[i][j]);
}
printf("\n");
}
system("pause");
return 0;
}