#include <stdio.h>
typedef struct {
int weight;
int value;
} Item;
int max(int a,int b){
if(a>b){
return a;
}
else {
return b;
}
}
int knapsack(Item items[], int n, int W) {
int i, w;
int K[n + 1][W + 1];
for (i = 0; i <= n; i++) {
for (w = 0; w <= W; w++) {
if (i == 0 || w == 0) {
K[i][w] = 0;
} else if (items[i - 1].weight <= w) {
K[i][w] = max(items[i - 1].value + K[i - 1][w - items[i - 1].weight], K[i - 1][w]);
} else {
K[i][w] = K[i - 1][w];
}
}
}
return K[n][W];
}
int main() {
Item items[] = {{2, 3}, {3, 4}, {4, 5}, {5, 6}};
printf("最大价值为: %d\n", knapsack(items, sizeof(items) / sizeof(Item), 5));
Item items2[] = {{1, 3}, {2, 4}, {3, 5}, {4, 6}};
printf("最大价值为: %d\n", knapsack(items2, sizeof(items) / sizeof(Item), 5));
Item items3[] = {{5, 3}, {6, 4}, {7, 5}, {8, 6}};
printf("最大价值为: %d\n", knapsack(items3, sizeof(items) / sizeof(Item), 5));
return 0;
}