Algorithm 貪心策略之區間排程問題

2021-10-05 16:56:57 字數 1428 閱讀 3815

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 將...