阅读下列说明,回答问题。 [说明] 某餐厅供应各种标准的营养套餐。假设菜单上共有n项食物m1,m2,...,mn,每项食物mi的营养价值为vi,价格为Pi,其中i=1,2…,n,套餐中每项食物至多出现一次。客人常需要一个算法来求解总价格不超过M营养价值最大的套餐。 [问题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] [jl =nv[i-1][j] 9 else if (1) 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 (2) 16 x[i] =0 17 else 18 x[i] =1 19 (3) 20 return x and nv[n] [M] [问题2] 现有5项食物, 每项食物的营养价值和价格如表9.3所示。