#include <stdio.h>
struct item{
char name[20];
int weight;
int value;
};
int dynamicBackpack(struct item product[], int length, int packCapacity){
int maxValue[length][packCapacity];
int max = 0;
for(int i = 0; i < length; i++){
for(int j = 0; j < packCapacity; j++){
if(i == 0){
maxValue[i][j] = product[i].value;
}else if(j + 1 >= product[i].weight){
if(maxValue[i - 1][j] + product[i].value > product[i].value && j + 1 >= product[i].weight + product[i - 1].weight){
maxValue[i][j] = maxValue[i - 1][j] + product[i].value;
}else if(maxValue[i - 1][j] > product[i].value){
maxValue[i][j] = maxValue[i - 1][j];
}else{
maxValue[i][j] = product[i].value;
}
}else if(j + 1 < product[i].weight){
maxValue[i][j] = maxValue[i - 1][j];
}
}
}
for(int i = 0; i < length; i++){
for(int j = 0; j < packCapacity; j++){
if(maxValue[i][j] > max){
max = maxValue[i][j];
}
}
}
return max;
}
int main () {
struct item product[3] = {{"guitar", 1, 1500}, {"laptop", 3, 2000}, {"sound", 4, 3000}};
int length = sizeof(product) / sizeof(product[0]);
int packCapacity = 4;
printf("在背包容量为4磅时,最多可拿价值为%d美元的商品。",dynamicBackpack(product, length, packCapacity));
return 0;
}