阅读下列说明和 C 代码,回答问题 1至问题 3,将解答写在答题纸的对应栏内。
【说明】
0-1背包问题定义为:给定1个物品的价值v[1....i]、重量w[1....i]和背包容量T,每个物品装到背包里或者不装到背包里,求最优的装包方案,使得所得到的价值最大。
0-1背包问题具有最优子结构性质,定义c为最优装包方案所获得的最大价值。则可得到如下所示的递归式。
【C代码】
下面是算法的C语言实现
(1)常量和变量说明
T:背包容量
V[]:价值数组
W[]:重量数组
C[][]:c[i][j]表示前i个物品在背包容量为j的情况下最优装包方案所能获得的最大价值
(2)C程序
#include
#include
#define N 6
#define maxT 1000
int c[N][maxT]={0}:
int Memoized_Knapsack(int v[N], int w[N], int T) {
int i;
int j:
for(i=0;i<N;i++){
for(j=0;j<=T;j++){
c[i][j]= -1;
}
}
return Calculate_Max_Value(v, w, N-l, T);
}
int Calculate_Max_Value(int v[N], int w[N], int i , int j){
int temp =0;
if(c[i][j] !=-1){
(1) ;
}
if(i=0||j=0){
c[i][j]=0;
}else{
c[i] [j]= Calculate_Max_Value (v, w, i-1, j);
if((2)){
temp=(3);
if(c[i] [j]<temp) {
(4);
}
}
}
return c [i][j];
}


