日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

(贪心)背包问题

發(fā)布時間:2025/3/12 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 (贪心)背包问题 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1.最優(yōu)裝載問題。

給出n個物體,第i個物體重量為wi。選擇盡量多的物體,使得總重量不 超過C。

由于只關(guān)心物體的數(shù)量,所以裝重的沒有裝輕的劃算。只需把所有物體按重量從小到大 排序,依次選擇每個物體,直到裝不下為止

2.部分背包問題。

有n個物體,第i個物體的重量為wi,價值為vi。在總重量不超過C的情 況下讓總價值盡量高。每一個物體都可以只取走一部分,價值和重量按比例計算。

本題在上一題的基礎(chǔ)上增加了價值,所以不能簡單地像上題那樣先拿輕的(輕的可能價 值也小),也不能先拿價值大的(可能它特別重),而應(yīng)該綜合考慮兩個因素。一種直觀的 貪心策略是:優(yōu)先拿“價值除以重量的值”最大的,直到重量和正好為C。
注意:由于每個物體可以只拿一部分,因此一定可以讓總重量恰好為C(或者全部拿走 重量也不足C),而且除了最后一個以外,所有的物體要么不拿,要么拿走全部。

3.乘船問題。

有n個人,第i個人重量為wi。每艘船的最大載重量均為C,且最多只能乘兩 個人。用最少的船裝載所有人。

考慮最輕的人i,他應(yīng)該和誰一起坐呢?如果每個人都無法和他一起坐船,則唯一的方 案就是每人坐一艘船。否則,他應(yīng)該選擇能和他一起坐船的人中最重的 一個j。這樣的方法是貪心的,因此它只是讓“眼前”的浪費最少。可以用反證法說明。

情況1:i不和任何一個人坐同一艘船,那么可以把j拉過來和他一起坐,總船數(shù)不會增 加(而且可能會減少)。
情況2:i和另外一人k同船。由貪心策略,j是“可以和i一起坐船的人”中最重的,因 此k比j輕。把j和k交換后k所在的船仍然不會超重(因為k比j輕),而i和j所在的船也不會超 重(由貪心法過程),因此所得到的新解不會更差
由此可見,貪心法不會丟失最優(yōu)解。最后說一下程序?qū)崿F(xiàn)。在剛才的分析中,比j更重 的人只能每人坐一艘船。這樣,只需用兩個下標(biāo)i和j分別表示當(dāng)前考慮的最輕的人和最重的 人,每次先將j往左移動,直到i和j可以共坐一艘船,然后將i加1,j減1,并重復(fù)上述操作。

總結(jié)

以上是生活随笔為你收集整理的(贪心)背包问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。