| 【问题1】 下面是用动态规划策略求解该问题的伪代码,请填充其中的空缺(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 {{U}}(1) {{/U}} 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 {{U}}(2) {{/U}} 16 x[i] = 0 17 else 18 x[i] = 1 19 {{U}} (3) {{/U}} 20 return x and nv[n][M] |
| 【问题2】 现有5项食物,每项食物的营养价值和价格如下表所示。
若要求总价格不超过100的营养价值最大的套餐,则套餐应包含的食物有{{U}} (4) {{/U}}(用食物项的编码表示),对应的最大营养价值为{{U}} (5) {{/U}}。 |
| 【问题3】 问题1中伪代码的时间复杂度为{{U}} (6) {{/U}}(用O符号表示)。 |
ViXi(Xi=0,1)
PiXi≤M
(xi=0,1)