題目內容:
有n頭牛(1<=n<=50,000)要**。給定每頭牛**的時間區間[a,b] (1<=a<=b<=1,000,000,a,b為整數)。牛需要呆在畜欄裡才能**。乙個畜欄同一時間只能容納一頭牛。問至少需要多少個畜欄,才能完成全部**工作,以及每頭牛都放哪個畜欄裡?注意:在同乙個畜欄的兩頭牛,它們**時間區間不能在端點重合。
輸入格式:
第1行:乙個正整數n;
第2..n+1行:第i+1行的兩個整數給出第i頭奶牛的**時間。
輸出格式:
第1行:需要畜欄的最小數;
第2..n+1行:第i+1行表示第i頭奶牛被分配到的畜欄序號
輸入樣例:
5
1 10
2 43 6
5 84 7
輸出樣例:
412
324
時間限制:500ms記憶體限制:32000kb
思路分析:由題意可知,每一頭奶牛都必須在其**的區間進行**,並且題目要求使用畜欄的數目最少,辣麼我們可以採取貪心策略,每次將當前最早開始中最早結束的奶牛先放入畜欄**,然後依次將其他的奶牛放入畜欄,但是如果前面放入過奶牛的畜欄都正在使用,這時我們就要新增畜欄,否則直接放入空閒的畜欄。
#include
#include
#include
using namespace std;
struct cow
;//自定義排序方式,主start,次end公升序排序
bool mycmp
(cow &cowone, cow &cowtwo)
else
}int
main()
sort
(cowsvec.
begin()
, cowsvec.
end(
), mycmp)
;//按照起始時間主,結束時間輔進行公升序排序
//開始使用貪心策略,每次將當前最早開始最早結束的奶牛放入合適的畜欄
while
(++cnt < n)
if(index >= chulansize)
else
//標記這頭奶牛放置的畜欄下標(是從1開始!!!)
resindex[cowsvec[cnt]
.no]
= index +1;
}//最後chulan的大小就是畜欄的個數
cout << chulan.
size()
<< endl;
//輸出各頭奶牛放置的畜欄下標
for(auto res : resindex)
return0;
}
畜欄預定(貪心)
有n頭牛在畜欄中吃草。每個畜欄在同一時間段只能提供給一頭牛吃草,所以可能會需要多個畜欄。給定n頭牛和每頭牛開始吃草的時間a以及結束吃草的時間b,每頭牛在 a,b 這一時間段內都會一直吃草。當兩頭牛的吃草區間存在交集時 包括端點 這兩頭牛不能被安排在同乙個畜欄吃草。求需要的最小畜欄數目和每頭牛對應的畜...
貪心演算法 求解畜欄問題
題目內容 有n頭牛 1 n 50,000 要 給定每頭牛 的時間區間a,b。牛需要呆在畜欄裡才能 乙個畜欄同一時間只能容納一頭牛。問至少需要多少個畜欄,才能完成全部 工作,注意 在同乙個畜欄的兩頭牛,它們 時間區間不能在端點重合。輸入格式 第1行 乙個正整數n 第2 n 1行 第i 1行的兩個整數給...
貪心 Ybt 畜欄預定
同一時間內,乙個畜欄只能供一頭牛使用。給出一些牛需要使用畜欄的時間段,讓你求使用的最少畜欄數量與安排方案。輸入第一行乙個 n 代表牛的數量 接下來 2 n 1 行,每行兩個數,代表這頭牛使用畜欄的起始時間與結束時間。輸出第一行乙個數,代表最少畜欄數量。接下來 2 n 1 行,每行乙個數,代表這頭牛安...