非常经典的回溯法题目
#include <stdio.h>
int vmax = 0, n, c, weigh[100], value[100];
void FoundPath(int w_a, int v_a, int times);
int main ()
{
int i, j = 0, w_a = 0, v_a = 0, times = 0, ans[100];
while (1)
{
scanf ("%d%d", &n, &c);
if (n == 0 && c == 0) break;
for (i = 0; i < n; i++) scanf ("%d", &weigh[i]);
for (i = 0; i < n; i++) scanf ("%d", &value[i]);
vmax = 0, w_a = 0, v_a = 0, times = 0;
FoundPath(w_a, v_a, times);
ans[j] = vmax;
j++;
}
for (i = 0; i < j; i++) printf ("%d\n", ans[i]);
return 0;
}
void FoundPath(int w_a, int v_a, int times)
{
if (w_a > c || times > n) return ;
if (v_a > vmax) vmax = v_a;
FoundPath(w_a + weigh[times], v_a + value[times], times + 1);//装第times个
FoundPath(w_a, v_a, times + 1);//不装
return ;
}