貪心入門案例(二) 部分揹包問題

2021-10-02 04:08:57 字數 1001 閱讀 1888

有n個物品 ,但物品不僅僅只有重量w ,還有價值v,揹包的重量上限還是c ,

要使放進揹包的物品的重量不超過c的情況下價值總和最大

【注】物品可以拿一部分並且這部分的重量和價值就按照比例計算。

首先,目標要求價值總和最大,我們很容易想到每次先拿價值最大的。但這樣沒有考慮到揹包的重量這個條件。又因為物品可以按比例取,我們不難想到按照每個物品的「單位重量所含的價值==

然後,我們就按照順序將單位重量下價值更高的物品整體全部拿走,

直到,後來我們的揹包所剩餘的容量已經不足以放下整個物品了, 那我們就把這最後乙個物品拆分只拿走部分,這樣我們就填滿了揹包

(可以注意到此題只要物品總和比揹包容量大,揹包總是可以被填滿)。

#include#include#define n 100

using namespace std;

struct node;

bool cmp(const node &a,const node &b)

int main()

for(int i=0;i>a[i].v;

a[i].cp=(double)a[i].v/a[i].w;

} sort(a,a+n,cmp); //將所有物品按單位重量的價值遞減排序

int number;//number用於統計揹包裡的物品總個數

double sum=0; //sum用於統計揹包裡的物品總價值。

for(int i=0;i=0){ //判斷揹包是否還裝的下當前物品

揹包問題(1)部分揹包

1.現有4個揹包,已知每個物品的體積和價值,每個揹包最多容納10個體積的物品,每件物品只能拿一次,問怎麼樣裝使揹包的價值最大?分析 1 二維陣列求法 如果包的體積由0變化到10,每次物品只能放一次,則包內所放物品的價值量為 則包所放的最大價值即二維陣列的最後乙個值 如下 include using ...

貪心演算法 0 1部分揹包問題

給定n種物品和乙個揹包。物品i的重量是wi,其價值為vi,揹包的容量為c。應如何選擇裝入揹包的物品,使得裝入揹包中物品的總價值最大 選擇物品i裝入揹包時,可以選擇物品i的一部分,而不一定要全部裝入揹包,1 i n。因為每乙個物品都可以分割成單位塊,單位塊的利益越大顯然總收益越大,所以它區域性最優滿足...

洛谷P2240 部分揹包問題 貪心

洛谷p2240 樣例 輸入 450 1060 20100 30120 1545 輸出 240.00 思路 與動態規劃的揹包問題不同,此處的金幣是可以隨意分割的,我們可以運用貪心,優先選取最合適的金幣堆。怎麼優先選擇呢?題中說道 分割完的金幣重量價值比 也就是單位 不變 所以可以優先選擇單位 大的金幣...