畜欄問題(貪心策略)

2021-09-14 00:28:15 字數 1389 閱讀 7596

題目內容:

有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 行,每行乙個數,代表這頭牛安...