日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

【NOIP2006普及組】開心的金明

 長沙7喜 2019-10-19

看過題后,你可能會發(fā)現(xiàn)這是很典型的0-1背包問題,即要么選擇這件要么不選。

0-1背包問題最經典的解法就是動態(tài)規(guī)劃了。當然這道題的數(shù)據(jù)范圍較小,也可以用暴搜(暴力搜索)來做,即枚舉所有情況。我們用遞歸來實現(xiàn)一下。

對于每一件物品就模擬兩種情況或者不選,千萬不要漏掉哪一種情況,最后求取最大值就好了。(由于我們當時模擬賽,所以寫了文件讀取數(shù)據(jù),請見諒。)

好了,暴搜的解法就介紹到這里,接下來,要介紹經典解法——動態(tài)規(guī)劃。

動態(tài)規(guī)劃最重要的就是建立遞推式,根據(jù)上面講解我們已經明確了對于每個物品依次檢查選或不選,用dp[i][j]表示前 i 個物品在 j 金額下的最優(yōu)解(結果最大)。

如果j放不下第i個物品的話,那么就只能從編號為[1,i-1]的物品中選擇了,也就是dp[i-1][j]的值。所以,

dp[i][j] = dp[i-1][j]; (其中,j < v[i])

那么j可以放的下這個物品的時候應該怎么辦呢?很明顯,我們有兩種選擇,選或不選,之后我們取較大的值。

     dp[i-1][j-v[i]]+v[i]*p[i];
不選 dp[i-1][j];

所以我們得到遞推式

dp[i][j] = max(dp[i-1][j], dp[i-1][j-v[i]]+v[i]*p[i]);(其中,j>=v[i])

把兩種情況整理一下,

怎么樣?思路明確多了吧!

根據(jù)遞推式來寫代碼就好了。最后附上AC代碼。

    本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多