软件设计师2008年12月下午试题4(C语言 动态规划)
【說(shuō)明】
某公司供應(yīng)各種標(biāo)準(zhǔn)的營(yíng)養(yǎng)套餐。假設(shè)菜單上共有n項(xiàng)食物m1,m2,…,mn,每項(xiàng)食物mi的營(yíng)養(yǎng)價(jià)值為vi,價(jià)格為pi,其中i=1,2,…,n,套餐中每項(xiàng)食物至多出現(xiàn)一次。客人常需要一個(gè)算法來(lái)求解總價(jià)格不超過(guò)M的營(yíng)養(yǎng)價(jià)值最大的套餐。
【問(wèn)題1】(9?分)
下面是用動(dòng)態(tài)規(guī)劃策略求解該問(wèn)題的偽代碼,請(qǐng)?zhí)畛淦渲械目杖?1)、(2)和(3)處。
偽代碼中的主要變量說(shuō)明如下:
n:?總的食物項(xiàng)數(shù);
v:?營(yíng)養(yǎng)價(jià)值數(shù)組,下標(biāo)從1到n,對(duì)應(yīng)第1到第n項(xiàng)食物的營(yíng)養(yǎng)價(jià)值;
p:?價(jià)格數(shù)組,下標(biāo)從1到n,對(duì)應(yīng)第1到第n項(xiàng)食物的價(jià)格;
M:總價(jià)格標(biāo)準(zhǔn),即套餐的價(jià)格不超過(guò)M;
x:?解向量(數(shù)組),下標(biāo)從1到n,其元素值為0或1,其中元素值為0表示對(duì)應(yīng)的食物不出現(xiàn)在套餐中,元素值為1表示對(duì)應(yīng)的食物出現(xiàn)在套餐中;
nv:n+1行M+1列的二維數(shù)組,其中行和列的下標(biāo)均從0開始,nv[i][j]表示由前i項(xiàng)食物組合且價(jià)格不超過(guò)?j?的套餐的最大營(yíng)養(yǎng)價(jià)值。問(wèn)題最終要求的套餐的最大營(yíng)養(yǎng)價(jià)值為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]?
?
【問(wèn)題2】(4?分)
現(xiàn)有5項(xiàng)食物,每項(xiàng)食物的營(yíng)養(yǎng)價(jià)值和價(jià)格如表4-1所示。
表?4-1??食物營(yíng)養(yǎng)價(jià)值及價(jià)格表
| 編碼 | 營(yíng)養(yǎng)價(jià)值 | 價(jià)格 |
| m1 | 200 | 50 |
| m2 | 180 | 30 |
| m3 | 225 | 45 |
| m4 | 200 | 25 |
| m5 | 50 | 5 |
若要求總價(jià)格不超過(guò)100的營(yíng)養(yǎng)價(jià)值最大的套餐,則套餐應(yīng)包含的食物有m2,m3,m4(用食物項(xiàng)的編碼表示),對(duì)應(yīng)的最大營(yíng)養(yǎng)價(jià)值為?605。
【問(wèn)題1】中偽代碼的時(shí)間復(fù)雜度為O(n*M)
轉(zhuǎn)載于:https://www.cnblogs.com/djcsch2001/archive/2011/07/01/2095914.html
總結(jié)
以上是生活随笔為你收集整理的软件设计师2008年12月下午试题4(C语言 动态规划)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 怎么在泰山地区开展生态文明建设?
- 下一篇: 可以从max中导出静态模型并渲染了。