0622-0627讀書筆記-貪心演算法初步學習
問題描述
123
假設有n個活動,這些活動有起止時間,這些活動都要使用同乙個如教室這樣的資源。每次只能有乙個活動使用該資源。我們定義兩個活動起止時間不相交,則稱這兩個活動是相容
的。求乙個最大相容活動。
演算法思路
12
我們採取的策略是始終選取結束時間最早的活動作為我們的解集合成員。這個策略就是貪婪選擇的結果。
問題描述
12
給定n種物品,1個揹包,揹包容量為c,每個物品i的價值為vi,重量為wi,如何選擇裝入物品能使揹包的總價值最大?
演算法思路
1234
將物品按照單位重量價值進行排序(從大到小),將盡可能多的單位重量價值最高的物品裝入揹包,若將這種物品全部裝入揹包後,揹包還有多餘容量,則選擇單位重量價值次高
的並盡可能多地裝入揹包。如果最後一件物品無法全部裝入,則計算可以裝入的比例,然
後按比例裝入。
解決方案
1
使用結構體儲存價值從高到低
**
1234567
891011
1213
1415
1617
1819
2021
2223
2425
2627
2829
3031
3233
3435
3637
38
#include#include
using
namespace
std;
struct
itemitems[100];
bool
cmp(const item &a,const item &b)
intmain
()sort(items,items+n,cmp);//排序
int sum=0,j=0;
for(j=0;j
if(items[j].weight<=c)
else
break;
} if(j
items[j].rate=c/items[j].weight;
sum+=items[j].rate*items[j].weight;
}return
0; }
可以看到,貪心演算法的思想便是去當前最好的選擇,在某些情況下,這種選擇出來的結果為最優解
貪心演算法初步
二 區間貪心 求解最優化問題的方法,總是考慮區域性最優 較優 的策略,使得全域性結果達到最優 較優 想要獲得最優解往往需要對才用的策略進行證明,一般採用反證或者是數學歸納法 在考試過程中,如果沒有時間想到嚴謹的證明,如果在想到某個可行的策略且短時間內沒有想出反例推翻它,則勇敢實現即可。月餅是中國人在...
貪心演算法自主學習筆記
我之前雖然在上課時進行了已經算很多的練習,從簡到難。但是實際上理論方面,我完全沒有聽懂,不知道什麼時候用,怎麼用,反正經常聽見大佬們說貪心就好了,但是還是迷迷糊糊的,所以在這裡進行一些小小的學習記錄。我們都知道在求解乙個問題的可行解或者最優解 即是最優化 的題目時,我們往往可以運用貪心演算法對此類問...
學習筆記17 貪心演算法
給定n個閉區間,請你在數軸上選擇盡量少的點,使得每個區間內至少包含乙個選出的點,輸出選擇點的最少數量。1 將每個區間按照右端點從小到大排序 2 從前往後依次列舉每個區間,如果當前區間已經包含點,則直接pass,否則選擇當前區間的右端點。include include using namespace ...