#include <stdio.h>
int max(int a, int b) {
return (a > b) ? a : b;
}
int knapsack(int W, int weights[], int values[], int n) {
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 (weights[i - 1] <= w)
K[i][w] = max(values[i - 1] + K[i - 1][w - weights[i - 1]], K[i - 1][w]);
else
K[i][w] = K[i - 1][w];
}
}
return K[n][W];
}
int main() {
printf("测试1:");
int capacity1 = 10;
int weights1[] = {2, 3, 4, 5};
int values1[] = {3, 4, 5, 6};
int numItems1 = sizeof(weights1) / sizeof(weights1[0]);
int maxValue1 = knapsack(capacity1, weights1, values1, numItems1);
printf("可获得的最大价值: %d\n", maxValue1);
printf("测试2:");
int capacity2 = 15;
int weights2[] = {5, 6, 7, 8};
int values2[] = {3, 4, 5, 6};
int numItems2 = sizeof(weights2) / sizeof(weights2[0]);
int maxValue2 = knapsack(capacity2, weights2, values2, numItems2);
printf("可获得的最大价值: %d\n", maxValue2);
printf("测试3:");
int capacity3 = 5;
int weights3[] = {2, 3, 4, 5};
int values3[] = {3, 4, 5, 6};
int numItems3 = sizeof(weights3) / sizeof(weights3[0]);
int maxValue3 = knapsack(capacity3, weights3, values3, numItems3);
printf("可获得的最大价值: %d\n", maxValue3);
return 0;
}