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

简答题

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

}

根据说明和C代码,分析算法的设计策略及求解方式。

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

答案:

问题2.

5:动态规划

6:自底向上


解析:

根据说明和C代码,可以看出该算法采用了动态规划的设计策略。动态规划是一种在数学、计算机科学和经济学中经常使用的优化技术,它通过把原问题分解为相互重叠的子问题来解决复杂问题。在这个背包问题中,动态规划被用来找到最优装包方案,使得所得到的价值最大。

在求解过程中,该算法采用了自底向上的方式。从C代码可以看出,算法首先初始化了一个二维数组c,然后通过一个循环从最小的子问题开始计算,逐步构建更大的子问题的解,直到得到原问题的解。这种方式也称为自下而上的动态规划实现方式,因为它从最小的子问题开始逐步求解更大的问题。

创作类型:
原创

本文链接:根据说明和C代码,分析算法的设计策略及求解方式。

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

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

分享考题
share