#include <stdio.h>
#define NUM_ITEMS 5
#define KNAPSACK_CAPACITY 10
int weights[NUM_ITEMS] = {2, 3, 6, 5, 4};
int values[NUM_ITEMS] = {66, 3953, 549, 40, 799};
int maxValue = 0;
int solution[NUM_ITEMS] = {0};
int currentWeight = 0;
int currentValue = 0;
void backtrack(int i)
{
if (i >= NUM_ITEMS)
{
if (currentValue > maxValue)
{
maxValue = currentValue;
for (int j = 0; j < NUM_ITEMS; j++)
solution[j] = (j == 0) ? currentWeight : solution[j - 1];
}
return;
}
if (currentWeight + weights[i] <= KNAPSACK_CAPACITY)
{
currentWeight += weights[i];
currentValue += values[i];
backtrack(i + 1);
currentWeight -= weights[i];
currentValue -= values[i];
}
backtrack(i + 1);
}
int main()
{
backtrack(0);
printf("物品重量为:");
for (int i = 0; i < NUM_ITEMS; i++)
printf("%d ", weights[i]);
printf("\n");
printf("物品价值为:");
for (int i = 0; i < NUM_ITEMS; i++)
printf("%d ", values[i]);
printf("\n");
printf("最大价值为: %d\n", maxValue);
printf("最优解为:");
for (int i = 0; i < NUM_ITEMS; i++)
printf("%d ", solution[i]);
printf("\n");
return 0;
}