HDU 5360 Hiking (貪心 優先佇列)

2021-08-21 19:21:12 字數 906 閱讀 4012

演算法,思路來自:這篇部落格的**有小錯誤)

定義結構體(陣列):左端,右端,原來的位置(答案所求)

對於每個樣例

清空佇列

清空放答案的陣列

讀入左端,讀入右端,對結構體陣列按照左端較小在前進行排序

用cnt,和答案陣列,存已經邀請的人

用i存當前掃到的結構體位置

迴圈:佇列不為空時,

詢問當前佇列裡,右端最小的數是否比cnt大,如果是,就放入答案,

其餘的結構體仍在優先佇列裡。

從use往後掃結構體陣列,把左端<=當前人數的結構體放入優先佇列列

(佇列右端較小的在堆頂)

隊列為空就出迴圈,

輸出cnt

把答案輸出來,再把其餘數輸出來

#include#include#includeusing namespace std;

#define maxn 100000

struct what

}soda[maxn+10];

bool compare(const what x,const what y)

for(int i=1;i<=n;i++)

scanf("%d",&soda[i].right);

sort(soda+1,soda+n+1,compare);

if(soda[1].left!=0)

q.pop();

}for(i=i;soda[i].left<=cnt&&i<=n;i++)

}printf("%d\n",cnt);

if(cnt==n)

}else

for(i=1;i<=n;i++)

printf("\n");

}}//

return 0;

}

hdu 5360 Hiking 優先佇列 貪心

題目 題意 beta有n個朋友,beta要邀請他的朋友go hiking,已知每個朋友的理想人數 l,r 現有l r個人準備去,那麼這個朋友就去 求最多有多少人去。及beta邀請朋友的順序。分析 每次邀請人的最優解就是 選會去的人裡面r最小的那個人。實現的話,cur代表已經準備go hiking的人...

HDU 5360 Hiking 優先佇列

題意 beta想要請n個soda去遠足,邀請第i個soda時要符合乙個條件 當前人數不少於li並且不大於ri 如果滿足就同意,即使後來的人數會不符合現在提出的條件 問最多可以邀請多少個soda,輸出數目和邀請順序 若有多種方法輸出任乙個即可 思路 將soda按照l的值從小到大排列 如果soda 0則...

優先佇列 HDOJ5360 Hiking

題意 有n個人,每個人有兩個引數 l 和 r 邀請他們去hiking,當 當前已經邀請到的人數大於等於 l 並且小於等於 r 那麼這個人就會去 問最多能邀請到幾個人 並輸出 依次要邀請的人的編號 編號1 n 先要按 l 排序 l 小的在前 因為所有 l 小於等於當前已經邀請到的人數的人才能被邀請 對...