博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
软件设计师2008年12月下午试题4(C语言 动态规划)
阅读量:5277 次
发布时间:2019-06-14

本文共 1229 字,大约阅读时间需要 4 分钟。

【说明】

  某公司供应各种的营养套餐。假设菜单上共有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]。 

伪代码如下:

  MaxNutrientValue(n, v, p, M, x)

  1    for i = 0 to n
  2          nv[i][0] = 0
  3    for j = 1 to M
  4          nv[0][j] = 0
  5    for i = 1 to n
  6          for j = 1 to M
  7                  if j < p[i]    //若食物mi不能加入到套餐中
  8                        nv[i][j] = nv[i - 1][j]
  9                  else if nv[i-1][j]>=nv[i-1][j-p[i]]+v[i]

  10                      nv[i][j] =    nv[i - 1][j]

  11                else
  12                      nv[i][j] =    nv[i - 1][j – p[i]] + v[i]
  13    j = M
  14    for i = n downto 1
  15          if nv[i][j]=nv[i-1][j]
  16                x[i] = 0
  17          else
  18                x[i] = 1
  19                j=j-p[i]
  20    return x and nv[n][M] 

 

【问题2】(4 分)

  现有5项食物,每项食物的营养价值和价格如表4-1所示。

  表 4-1  食物营养价值及价格表

编码

营养价值

价格

m1

200

50

m2

180

30

m3

225

45

m4

200

25

m5

50

5

  若要求总价格不超过100的营养价值最大的套餐,则套餐应包含的食物有m2,m3,m4(用食物项的编码表示),对应的最大营养价值为 605。

【问题1】中伪代码的时间复杂度为O(n*M)

转载于:https://www.cnblogs.com/djcsch2001/archive/2011/07/01/2095914.html

你可能感兴趣的文章
2012暑期川西旅游之总结
查看>>
12010 解密QQ号(队列)
查看>>
2014年辛星完全解读Javascript第一节
查看>>
装配SpringBean(一)--依赖注入
查看>>
java选择文件时提供图像缩略图[转]
查看>>
方维分享系统二次开发, 给评论、主题、回复、活动 加审核的功能
查看>>
Matlab parfor-loop并行运算
查看>>
string与stringbuilder的区别
查看>>
2012-01-12 16:01 hibernate注解以及简单实例
查看>>
iOS8统一的系统提示控件——UIAlertController
查看>>
PAT甲级——1101 Quick Sort (快速排序)
查看>>
python创建进程的两种方式
查看>>
1.2 基础知识——关于猪皮(GP,Generic Practice)
查看>>
迭代器Iterator
查看>>
java易错题----静态方法的调用
查看>>
php建立MySQL数据表
查看>>
最简单的线程同步的例子
查看>>
旅途上看的电影和观后感
查看>>
Ztree异步树加载
查看>>
关于IE和火狐,谷歌,Safari对Html标签Object和Embed的支持问题
查看>>