注意返回条件和返回值即可
#include <stdio.h>
#define MAX_LENGTH 10000
int wl[] = {2,4,3,1};
int vl[] = {3,6,5,2};
int length = 3;
/*
int way[MAX_LENGTH][MAX_LENGTH] = {};
void get_way(){
}
*/
//01背包,每种最多选择一次
int calc_pack01(int w,int i){
//非法情况应优先处理
if (w < 0)
return -9999;
if (i == -1 || w == 0 )
return 0;
int a,b,max;
a = calc_pack01(w - wl[i],i-1) + vl[i];
b = calc_pack01(w,i-1);
max = a > b ? a : b;
return max;
}
//完全背包,每种选择次数不限
int calc_pack1(int w,int i){
if (w < 0)
return -9999;
if (i == -1 || w == 0 )
return 0;
int a,b,max;
a = calc_pack1(w - wl[i],i) + vl[i];
b = calc_pack1(w,i-1);
max = a > b ? a : b;
return max;
}
int main(){
int w;
w = 8;
printf("%d\n",calc_pack01(w,length));
printf("%d\n",calc_pack1(w,length));
return 0;
}