演算法競賽 貪心演算法 01部分揹包問題

2022-09-22 03:18:09 字數 811 閱讀 3818

問題描述:

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

解題思路:

優先拿「價值除以重量的值」(價效比)最高的,直到重量和正好為 c。

由於可以只取一部分,所以一定可以取到重量和正好為 c;並且只有最後取的物體是部分取(或者不取),在其之前取的物體都是全部取走。

輸入第一行輸入兩個正整數m和n(m和n不大於10000),後面跟n行(每個房間的乳酪數和貓食的需求量)。

輸出輸出老鼠得到的最多的乳酪數,保留三位小數。

資料範圍:

第一行輸入兩個正整數m和n(m和n不大於10000),後面跟n行(每個房間的乳酪數和貓食的需求量)。

ac**:

#include#includeusing namespace std;

struct nodea[10000];

bool cmp(node x,node y)

int main ()

else

}sum=(int)(sum*1000+0.5)/1000.0;

//手動四捨五入

printf("%.3lf\n",sum);

} }return 0;

}

注:手動四捨五入是為了避免某些測試用例的資料在 printf 格式化輸出時出現誤差。

參考:[

解決方法:

ans=(int)(ans*10^k + 0.5)/10^k;

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

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

部分揹包問題 貪心演算法

有n個商品,每個商品的重量為wi,為 pi,現有乙個揹包,最多能裝 的重量 其中 0 i 問 怎樣裝能使包中裝入的商品價值最高 對於每個商品可以只裝該商品的一部分 include stdio.h include iostream include stdlib.h define maxsize 100...

貪心演算法解決部分揹包問題

所謂貪心演算法是指,在對問題求解時,總是做出在當前看來是最好的選擇。也就是說,不從整體最優上加以考慮,所做出的僅是在某種意義上的區域性最優解。貪心演算法不是對所有問題都能得到整體最優解,但對範圍相當廣泛的許多問題他能產生整體最優解或者是整體最優解的近似解。貪心演算法的基本思路如下 1.建立數學模型來...