阅读下列说明和C代码,回答问题1至问题3,将解答写在答题纸的对应栏内。 【说明】 0-1背包问题定义为:给定i个物品的价值v[1…i]、重量w[1…i]和背包容量T,每个物品装到背包里或者不装到背包里。求最优的装包方案,使得所得到的价值最大。

admin2021-03-24  34

问题 阅读下列说明和C代码,回答问题1至问题3,将解答写在答题纸的对应栏内。
【说明】
    0-1背包问题定义为:给定i个物品的价值v[1…i]、重量w[1…i]和背包容量T,每个物品装到背包里或者不装到背包里。求最优的装包方案,使得所得到的价值最大。
    0-1背包问题具有最优子结构性质。定义c[T]为最优装包方案所获得的最大价值,则可得到如下所示的递归式。
        
【C代码】
    下面是算法的C语言实现。
    (1)常量和变量说明
    T:背包容量
    v[]:价值数组
    w[]:重量数组
    c[]:c[j]表示前i个物品在背包容量为j的情况下最优装包方案所能获得的最大价值
   (2)C程序

    #include<Stdio.h>
    #include<math.h>
    #define N 6
    #define maxT 1000
    int c[N][maxT]={0};

    intMemoized_Knapsack(int V[N],int w[N],intT){
        inti;
        int j;
        for(i=0;i<N;i++){
            for(j=0;j<=T;j++){
                c[j]=一1;
            }
        }
        returnCalculate_Max_Value(v,w,N-1,T);
    }
    intcalculate_Max_Value(int v[N],  int w[N],inti,int j){
        int temp=0;
        if(c[j]!=一1){
            return  (1)  
        }
        if(i=0 || j==0){
            c[j]=0;
        }else{
            c[j]=Calculate_Max_Value(v,w,i-1,j);
            if(  (2)  ){
                temp=  (3)  
                if(c[j]<temp){
                      (4)  
                }
            }
        }
        return c[j];
    }
若5项物品的价值数组和重量数组分别为v[]={0,1,6,18,22,28)和w[]={0,1,2,5,6,7},背包容量为T=11,则获得的最大价值为  (7)  

选项

答案(7)40

解析 根据题干和C代码,得到下列c的值。
      
    从表中可知c[5][11]=40。
转载请注明原文地址:https://kaotiyun.com/show/hoxZ777K
0

相关试题推荐
最新回复(0)