describe:
有n項工作,每項工作分別再si時間開始,在ti時間結束;對於每項工作,你都可以參與與否,如果選擇參與,那麼自始自終都必須全程參與;此外參加工作的時間段不能重複(即使是開始的瞬間和結束的瞬間的重疊也不允許);
你的目標是參與盡可能多的工作,那麼最多能參與多少項工作呢?
1<=n<=100000
1<=si<=ti<=10^9
輸入:第一行:n
第二行:n個整數空格隔開,代表n個工作的開始時間
第三行:n個整數空格隔開,代表n個工作的結束時間
樣例輸入:51 2 4 6 8
3 5 7 9 10
樣例輸出:
最終我們需要將乙個個事件按結束時間排序,如何讓它們排序並且保證每個事件的開始、結束時間是對應的呢?
這裡是將 si 和 ti 作為乙個類的成員變數,然後構建物件陣列;
排完序後是這樣的(這裡沒有用樣例,因為它本來就是有序的)#include
#include
using
namespace std;
class
thing
//建立事件類,裡面存放事件的起始時間s,終止時間e};
bool
compare
(thing a, thing b)
//自定義sort函式的第三個引數--排序函式,因為sort並不能按原有排序函式對類生成的物件進行排序
intfun
(int n,
int si,
int ti)
sort
(th,
&th[n-1]
, compare)
;//sort排序(要排序的陣列的起始位址,最後乙個要排序的位址,排序函式)
int last = th[0]
.e;for
(int i =
1; i < n; i++)}
return count;
}int
main()
;int ti=
; cout <<
fun(n, si, ti)
;//輸出結果為3
return0;
}
所以以後遇到區間排程問題,應想到按結束時間排序即可得解!
如有錯誤,感謝指正!
Algorithm學習筆記 翻硬幣(貪心)
問題描述 小明正在玩乙個 翻硬幣 的遊戲。桌上放著排成一排的若干硬幣。我們用 表示正面,用 o 表示反面 是小寫字母,不是零 比如,可能情形是 oo oooo 如果同時翻轉左邊的兩個硬幣,則變為 oooo oooo 現在小明的問題是 如果已知了初始狀態和要達到的目標狀態,每次只能同時翻轉相鄰的兩個硬...
演算法策略 貪心
目錄 貪心 greedy 練習1 最優裝載問題 加勒比海盜 問題 思路 實現 練習2 零錢兌換 問題 思路 實現 貪心策略中存在的問題 注意 練習3 0 1揹包 問題 思路例項分析 實現 貪心策略,也稱為貪婪策略,每一步都採取當前狀態下最優的選擇 區域性最優解 從而希望推導出全域性最優解 貪心的應用...
貪心策略 專案利潤
題目描述 輸入 cost 每個專案的花費 profits 每個專案的利潤 純利潤 k 最多能做k個專案 w 表示初始資金 輸出 最後獲得的最大錢數 說明 一次只能做乙個專案,且做完乙個之後馬上就能獲得收益,可以支援做下乙個專案 貪心策略 當資金有限時如何選擇那個專案使得掙的錢最多 演算法思想 1 將...