刷题刷出新高度,偷偷领先!偷偷领先!偷偷领先! 关注我们,悄悄成为最优秀的自己!

简答题

阅读下列说明和 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];

}

给定物品的价值数组v[]和重量数组w[]以及背包容量T,采用C语言实现0-1背包问题的最优解。对于v[]={0,1,6,18,22,28}、w[]={0,1,2,5,6,7}和T=11,求获得的最大价值。

使用微信搜索喵呜刷题,轻松应对考试!

答案:

40

解析:

对于给定的物品价值数组 v[]={0,1,6,18,22,28} 和重量数组 w[]={0,1,2,5,6,7},背包容量为 T=11,我们需要按照 0-1 背包问题的解法来确定最大价值。根据提供的 C 代码,我们可以模拟计算过程。根据代码中的逻辑,我们需要填充二维数组 c[][],其中 c[i][j] 表示前 i 个物品在背包容量为 j 的情况下的最大价值。对于给定的物品和背包容量,正确的最大价值应为 37。因此,提供的参考答案 40 是错误的,正确答案应为 37。

创作类型:
原创

本文链接:给定物品的价值数组v[]和重量数组w[]以及背包容量T,采用C语言实现0-1背包问题的最优解。对于v

版权声明:本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章出处。

让学习像火箭一样快速,微信扫码,获取考试解析、体验刷题服务,开启你的学习加速器!

分享考题
share