優先佇列這個博主講的比較全
題意:
奶牛曬太陽,有下限和上限,要保證曬到上下限之間,每瓶防曬霜可以固定一頭奶牛曬到乙個固定值,求最多幾頭奶牛可以達到要求
要點;
先把奶牛按照最小值從小到大排序,在把防曬霜從小到大排序,從最小的防曬霜列舉,如果大於奶牛的最小值就把奶牛的最大值放入優先數列(從小到大),這樣的話每次只要比較優先數列的第一項與奶牛的最大值就可以了。這裡面也有貪心的思想,每次防曬霜優先塗最大值比較小的奶牛。
**如下:
#include
#include
#include
#include
#include
#include
#include
#define maxn 3000
using
namespace
std;
struct node
;node cow[maxn], bot[maxn];
bool cmp(node a, node b)
struct cmp_temp //結構體控制優先佇列小的數優先度高
};priority_queue, cmp_temp>que; //優先佇列的定義函式宣告
int main()
while (bot[i].max&&que.size())//確保防曬霜沒用完
que.pop();//不管符不符合佇列中都有乙個元素出隊
}}
printf("%d\n", ans);
}return
0;}
心得:
優先數列感覺就是乙個已經封裝好的函式,你把資料放進去會自動幫你排好序,用的時候呼叫就可以了,好像是用堆來實現的,按最小和最大的好像跟堆一模一樣,但如果按其他的(比如按個位數大小之類的)就不知道了
POJ 3614 優先佇列
題意 傳送門 poj 3614 對防曬霜按 spf 公升序排序,每次處理當前防曬霜,就將所有 spf 小於等於該 spf 值的牛入隊,此時入隊的牛也是其後處理的防曬霜的可能塗抹物件。為了使防曬的牛數量最大,當前處理的防曬霜選擇優先佇列中 spf 最大值最小的牛進行塗抹。include include...
POJ3614 貪心 優先佇列
題意 m頭牛每頭牛有minspf和maxspf,n種spf為spf i 的防曬霜每種l i 瓶,盡可能給數量多的牛塗防曬霜,每頭牛最多塗一瓶。思路 貪心想法,實現是每次取出minspf spf i 的牛加入優先佇列中,優先佇列以牛的maxspf為優先,給maxspf spf i 且maxspf從小開...
POJ 3614 Sunscreen 優先佇列
題目大意 給你一些母牛,母牛有能容忍日光浴的最小和最大光照強度。每只母牛可以塗一次spf,spf可以將母牛可以承受的光照強度固定在某個地方。現在給你母牛的最小和最大值和不同的spf的光照強度及其數量,求最多可以有多少母牛享受日光浴?思路 優先佇列。先按母牛最小承受的排好,然後spf的值也從小到大。接...