做任務一
b君和m個人一起,要完成n個任務,在這個題中,m個人會看著這b君,自己什麼都不做。
第i個任務有乙個開始時間s[i]和結束時間e[i](保證s[i]<=e[i]),乙個人完成兩個任務的時間區間,不能有交集,但是可以首尾相連。(參考樣例)
換句話說,如果乙個人依次完成了(s[1], e[1]) (s[2], e[2]) (s[3], e[3])這3個任務,那麼這3個任務需要滿足s[1]<=e[1]<=s[2]<=e[2]<=s[3]<=e[3]。
同乙個任務只能完成一次,並且中間不能換人。
問b君乙個人最多可以完成多少個任務。
(單組 n <= 100000)
(所有 n 求和 <= 200000)
(開始時間和結束時間,都是非負整數,且在int範圍內。)
(開始時間 <= 結束時間,如果等於的話,意味著這個任務可以瞬間被做完,但是不能沒有人做)
input
多組資料,第一行是資料組數。
每組資料的第一行兩個整數n, m分別表示任務數,和人數。
以下n行,每行兩個整數表示任務的開始時間和結束時間。
output
對於每組資料輸出乙個整數
表示乙個人最多可以完成多少個任務。
input示例
2 2 1
1 3
2 4
2 1
1 3
3 5
output示例 1 2
這個比較水(:з」∠),最常見的方法就是把結束時間從小到大排序
還有一種方法就是把開始時間從小到大排序,如果存在有任務結束時間比當前任務早,就轉而做結束時間早的任務,**如下
#include
#include
#define ll long long
using
namespace
std;
int main()
sort(a,a+n);
ll sum=0,e=0;
for(i=0;iif(a[i].first>=e)else
if(a[i].secondcout
0;}
做任務3
b君和m個人一起,要完成n個任務,在這個題中,b君和m個人,什麼都不做。
第i個任務有乙個開始時間s[i]和結束時間e[i](保證s[i]<=e[i]),乙個人完成兩個任務的時間區間,不能有交集,但是可以首尾相連。(參考樣例)
換句話說,如果乙個人依次完成了(s[1], e[1]) (s[2], e[2]) (s[3], e[3])這3個任務,那麼這3個任務需要滿足s[1]<=e[1]<=s[2]<=e[2]<=s[3]<=e[3]。
同乙個任務只能完成一次,並且中間不能換人。
b君和m個人,想知道要想完成這些任務,至少需要幾個人?
(單組 n <= 100000)
(所有 n 求和 <= 200000)
(開始時間和結束時間,都是非負整數,且在int範圍內。)
(開始時間 <= 結束時間,如果等於的話,意味著這個任務可以瞬間被做完,但是不能沒有人做)
input
多組資料,第一行是資料組數。
每組資料的第一行兩個整數n, m分別表示任務數,和人數。
以下n行,每行兩個整數表示任務的開始時間和結束時間。
output
對於每組資料輸出乙個整數
表示完成這些任務至少需要多少人。
input示例
4 2 1
1 3
2 4
2 1
1 3
3 5
2 1
1 3
2 2
4 1
1 2
2 2
2 2
2 3
output示例
2 1 2 1
這裡用到了優先佇列(:з」∠),順便簡短的整理一下
priority_queue《結構型別》 佇列名;順便注意優先佇列的排列是從大到小排列,所以想到從小到大排列就要入隊相反數(:з」∠)q.size();//返回q裡元素個數
q.empty();//返回q是否為空,空則返回1,否則返回0
q.push(k);//在q的末尾插入k
q.pop();//刪掉q的第乙個元素
q.top();//返回q的第乙個元素
這道題的思路基本就是……將每人做任務結束時間入列,如果沒有人可以做當前任務,那麼當前任務結束時間入列,就是再加一人的意思(:з」∠)
**如下:
#include
#include
#include
#define ll long long
using
namespace
std;
int main()
else
}cout
0; }
貪心 STL 51nod 做任務三
按左點排序 能幹就幹 幹不了加人 但這次資料非常大 手動模擬超時 需要用到優先佇列 或 mutilset 佇列能解決的set 都可以解決 set支援性更佳 所以個人更傾向於set include include include using namespace std const int maxn 1...
任務安排問題 貪心
今天ckp打算去約會。大家都知道ckp是超級大帥哥,所以和他約會的mm也超級多,她們每個人都和ckp訂了乙個約會時間。但是今天ckp剛打算出門的時候才發現,某幾個mm的約會時間有衝突。由於ckp不會分身,還不能和多個mm同時約會,他只能忍痛割愛拒絕掉某些mm。但是ckp這個花心大蘿蔔還是不死心,他想...
貪心 任務排程問題
問題描述 假設給定n個任務的集合t,每個任務i有啟動時間si和完成時間fi si問題分析 要求 在最少的機器上安排完所有任務。如何選擇貪心策略才能使問題的解為最優解?顯然,開始時間最早的任務需要被先執行,但是最優解要求我們使用的機器最少,因此我們每次選擇時應盡量使用相同的機器。若已使用過的機器上現處...