貪心 揹包問題

2021-09-27 07:49:25 字數 1064 閱讀 9822

問題描述:

有一天,阿里巴巴趕著一頭毛驢上山砍柴。砍好柴準備下山時,遠處突然出現一股煙塵,瀰漫著直向上空飛揚,朝他這兒卷過來,而且越來越近。靠近以後,他才看清原來是一支馬隊,他們共有四十人,乙個個年輕力壯、行動敏捷。乙個首領模樣的人揹負沉重的鞍袋,從叢林中一直來到那個大石頭跟前,喃喃地說道:「芝麻,開門吧!」隨著那個頭目的喊聲,大石頭前突然出現一道寬闊的門路,於是強盜們魚貫而入。阿里巴巴待在樹上觀察他們,直到他們走得無影無蹤之後,才從樹上下來。他大聲喊道:他小心翼翼地走了進去,一下子驚呆了,洞中堆滿了財物,還有多得無法計數的金銀珠寶,有的散堆在地區上,有的盛在皮袋中。突然看見這麼多的金銀財富,「芝麻,開門吧!」他的喊聲剛落,洞門立刻開啟了。阿里巴巴深信這肯定是乙個強盜們數代經營、掠奪所積累起來的寶窟。為了讓鄉親們開開眼界,見識一下這些寶物,他想一種寶物只拿乙個,如果太重就用錘子鑿開,但毛驢的運載能力是有限的,怎麼才能用驢子運走最大價值的財寶分給窮人呢?阿里巴巴與四十大盜阿里巴巴陷入沉思中…

解題思路:

根據題目分析,這是一道典型的貪心求解問題。但是每次如何選取最優解?

每次選擇質量最小的,從而使裝入的財寶數量最多

每次選擇價值最大的,從而使裝入的財寶價值最高

但是分析可以發現,質量最小的不一定是價值最高的,所以僅從數量上無法得到最優解。如果價值最大,但是有可能質量也最大,從而導致裝走的數量有限,因此也不可取。

因為寶物可分割,因此每次可以選擇價效比最高的裝入

解3,因為每次裝入的都是價效比最高的,即在有限的載重能力下裝入的價值最高的,因此最終解一定是最優解。

**示例:

#include

using namespace std;

struct bag

;bool cmp

(bag a, bag b)

intmain()

sort

(bag, bag+n, cmp)

;//按價效比排序

for(

int i =

0; i < n; i++

)else

} cout << sum;

return0;

}

貪心揹包問題

有乙個揹包,揹包容量是m 150。有7個物品,物品可以分割成任意大小。要求盡可能讓裝入揹包中的物品總價值最大,但不能超過總容量。物品 a b c d e f g 重量 35 30 60 50 40 10 25 價值 10 40 30 50 35 40 30 分析 目標函式 pi最大 約束條件是裝入的...

揹包問題(貪心)

現在有很多物品 它們是可以分割的 我們知道它們每個物品的單位重量的價值v和重量w 1 v,w 10 如果給你乙個揹包它能容納的重量為m 10 m 20 你所要做的就是把物品裝到揹包裡,使揹包裡的物品的價值總和最大。第一行輸入乙個正整數n 1 n 5 表示有n組測試資料 隨後有n測試資料,每組測試資料...

NYOJ 揹包問題(貪心)

時間限制 3000 ms 記憶體限制 65535 kb 難度 3 描述 現在有很多物品 它們是可以分割的 我們知道它們每個物品的單位重量的價值v和重量w 1 v,w 10 如果給你乙個揹包它能容納的重量為m 10 m 20 你所要做的就是把物品裝到揹包裡,使揹包裡的物品的價值總和最大。輸入第一行輸入...