#include<stdio.h>
#define N 6
#define W 21
int B[N][W]={0};
int w[6]={0,2,3,4,5,9};
int v[6]={0,3,4,5,8,10};
void knapsack(){
int k,C;
for(k=1;k<N;k++){
for(C=1;C<W;C++){
if(w[k]>C){ //如果当前物品比背包所能容纳的物品还大的话
B[k][C]=B[k-1][C]; //无法装入,指向上一个物品
}
else{
int value1=B[k-1][C-w[k]]+v[k]; //装入当前物品
int value2=B[k-1][C]; //不装入
if(value1>value2){
B[k][C]=value1;
}
else{
B[k][C]=value2;
}
}
}
}
}
int main()
{
knapsack();
printf("%d\n",B[5][20]);
return 0;
}
此处背包最多可装重量为20的物品