#include <stdio.h>
#define N 4
#define C 10
int w[N] = { 2, 6, 5, 4};
int v[N] = { 3, 5, 4, 6};
int x[N] = { 0, 0, 0, 0};
int cur_weight = 0;
int cur_value = 0;
int best_value = 0;
int best_x[N];
void backtrack(int t)
{
int i;
if(t > N - 1)
{
if(cur_value > best_value)
{
best_value = cur_value;
for(i = 0; i < N; ++i)
{
best_x[i] = x[i];
}
}
}
else
{
for(i = 0; i <= 1; ++i)
{
x[t] = i;
if(i == 0)
{
backtrack(t + 1);
}
else
{
if((cur_weight + w[t]) <= C)
{
cur_weight += w[t];
cur_value += v[t];
backtrack(t + 1);
cur_weight -= w[t];
cur_value -= v[t];
}
}
}
}
}
int main(int argc, char* argv[])
{
int i;
backtrack(0);
printf("最大值:%d\n",best_value);
for(i = 0; i < N; i++)
{
printf("%-3d", best_x[i]);
}
return 0;
}