題意:n頭任性的牛,每頭牛都要在自己的時間段裡擠奶,問最少用多少個擠奶槽並輸出每頭牛所在的擠奶槽的編號(從1開始)
思路:目標明確,求最少用多少奶槽,並輸出如何分配,明顯區間貪心,找貪心的方向,就是對時間的最末端進行貪心。
簡單來說,先把奶牛們的時間輸入並按開始時間進行排序,然後依次把有序的時間段都放入堆中,在此過程中每次取出堆中末端時間最小的和當前放入堆的時間段進行比較,如果能放到同乙個槽就放,反之開闢乙個新槽,最終得出結果。
**:
#include #include #include #include using namespace std;
struct node;
node a[51000];
int n;
struct cmp
};int cmp1(node a,node b)
int cmp2(node a,node b)
void input()
}void solve()
else
q.push(a[i]);
}sort(a,a+n,cmp2);
cout << ans <>n)
return 0;
}
poj3190區間類貪心 優先佇列
題意 每個奶牛產奶的時間為a到b,每個奶牛產奶時要占用一間房子,問n頭奶牛產奶共需要多少房子,並輸出每頭奶牛用哪間房子 分析 這題就是乙個裸的貪心,將奶牛按開始時間進行排序即可,但考慮一下資料範圍,我們可以用乙個優先佇列來進行維護,在優先佇列中我們按照奶牛的結束時間最小構造小頂堆,然後判斷新進來的元...
poj 3190 優先佇列 貪心
題意 有n頭牛,分別給他們擠奶的時間。然後每頭牛擠奶的時候都要在乙個stall裡面,並且每個stall每次只能占用一頭牛。問最少需要多少個stall,並輸出每頭牛所在的stall。e.g 樣例 input 5 1 10 2 43 6 5 84 7 output 412 324 hint explan...
題解 poj3190 貪心 堆優化
題目鏈結 按照開始吃草的時間把牛排序。用乙個小根堆維護每個畜欄最後一頭牛結束吃草的時間,嘗試把當前的牛安排在堆頂 include include include using namespace std define rep i,a,b for int i a i b i const int n 5e...