列表

详情


阅读下列说明,回答问题1至问题3,将解答填入答题纸的对应栏内。 
【说明】 
  希赛公司供应各种标准的营养套餐。假设菜单上共有n项食物m1,m2,…,mn,每项食物mi的营养价值为vi,价格为pi,其中i=1,2,…,n,套餐中每项食物至多出现一次。客人常需要一个算法来求解总价格不超过M的营养价值最大的套餐。 

【问题1】(9 分)  
  下面是用动态规划策略求解该问题的伪代码,请填充其中的空缺(1)、(2)和(3)处。 
  伪代码中的主要变量说明如下: 
  n: 总的食物项数; 
  v: 营养价值数组,下标从1到n,对应第1到第n项食物的营养价值; 
  p: 价格数组,下标从1到n,对应第1到第n项食物的价格; 
  M:总价格标准,即套餐的价格不超过M; 
  x: 解向量(数组),下标从1到n,其元素值为0或1,其中元素值为0表示对应的食物不出现在套餐中,元素值为1表示对应的食物出现在套餐中;
  nv:n+1行M+1列的二维数组,其中行和列的下标均从0开始,nv[i][j]表示由前i项食物组合且价格不超过 j 的套餐的最大营养价值。问题最终要求的套餐的最大营养价值为nv[n][M]。 
  伪代码如下: 
   
【问题2】(4 分)  
  现有5项食物,每项食物的营养价值和价格如表4-1所示。 

 
  若要求总价格不超过100的营养价值最大的套餐,则套餐应包含的食物有(4)(用食物项的编码表示),对应的最大营养价值为 (5)。 
 【问题3】(2 分)  
  【问题1】中伪代码的时间复杂度为(6)(用Ο符号表示)。  
  从下列的3道试题(试题五至试题七)中任选1道解答。
  如果解答的试题数超过1道,则题号小的1道解答有效。

参考答案:

 

【问题1】(共9分,各3分)  
       (1)nv[i-1][j]≥nv[i-1][j-p[i]]+v[i]
  (2)nv[i][j]=nv[i-1][j]
  (3)j=j-p[i]
【问题2】(共4分,各2分)
  (4)m2,m3,m4(注:答案中食物编码无前后顺序关系)
  (5)605
【问题3】(共2分)
  (6)O(nM),或O(n×M),或O(n*M)

 

详细解析:

上一题