hdu 5360 Hiking 優先佇列 貪心

2021-07-04 09:36:30 字數 826 閱讀 3463

題目:

題意:beta有n個朋友,beta要邀請他的朋友go hiking,已知每個朋友的理想人數[l,r](現有l~r個人準備去,那麼這個朋友就去)。求最多有多少人去。及beta邀請朋友的順序。

分析:每次邀請人的最優解就是:選會去的人裡面r最小的那個人。**實現的話,cur代表已經準備go hiking的人數,每次將所有l<=cur的人放進優先佇列,選出r最小的那個。如果隊列為空,那麼剩下的所有人將不會去,如果先出的那個人的[l,r]不滿足條件,那麼這個人以後也不會去go hiking,所以還是將他選出,只是去go hiking的人數不增。

**:

#include #include #include #include #include using namespace std;

const int maxn = 1e5+5;

struct node

}s[maxn];

bool cmp(node a,node b)

sort(s+1,s+1+n,cmp);

cur=0;

cnt=1;

i=1;

while(!q.empty())

q.pop();

while(1)

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

ans[cnt++]=s[i].id;

printf("%d\n",cur);

printf("%d",ans[1]);

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

printf(" %d",ans[i]);

printf("\n");

} return 0;

}

HDU 5360 Hiking 優先佇列

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

HDU 5360 Hiking (貪心 優先佇列)

演算法,思路來自 這篇部落格的 有小錯誤 定義結構體 陣列 左端,右端,原來的位置 答案所求 對於每個樣例 清空佇列 清空放答案的陣列 讀入左端,讀入右端,對結構體陣列按照左端較小在前進行排序 用cnt,和答案陣列,存已經邀請的人 用i存當前掃到的結構體位置 迴圈 佇列不為空時,詢問當前佇列裡,右端...

優先佇列 HDOJ5360 Hiking

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