分析:拿到這道題目,首先要看清楚最終的題目要求,它的要求是參與盡可能多的工作,並不是說工作總時間最長。
對於這題我們其實可以使用貪心演算法,就是不斷選取當前最優策略
我們不斷選取工作,其實可以有以下幾種思路進行選取,並進行聚反例來排除這種思路:
1.在可選的工作中,選取開始時間最早的.
反例:
這種情況下先根據開始最早原則選取3號工作,這樣剩下的1,2工作都不能被選取,而我們明顯可以看到如果1,2工作,其工作數量是只比選取1號工作多的------不可取
2.在可選的工作中,選取用時最短的的:
反例:
這種情況下按照用時最短的原則選取,先選3,那麼剩下的1,2都無法選取,和第一種情況是一樣的,還不如選取1,2工作更滿足題意------不可取
3.在可選的工作中選取與其他可選工作重疊最少的工作:
反例:
先選取5號工作,之後依次選取1和4,明顯不對,我們有一種更符合的情況,那就是1,2,3,4-------不可取
4.在可選的工作中,選取結束時間最早的工作:
最終我們用的就是這種情況,並沒有反例,我也確實找了好久沒有找到。對於這種思路,大家可以想想,結束的時間越早,那麼剩餘的供選擇的時間範圍也就更廣。
源**:
#include#include#includeusing namespace std;
#define max_n 100000
//int start[max_n];
//int end[max_n];
int n;
pairp[max_n];
int main()
//輸入資料,並組成pair對儲存在陣列中
int last=0,ans=0;
cout<
貪心演算法之區間排程問題
452.用最少數量的箭引爆氣球 什麼是貪心演算法呢?貪心演算法可以認為是動態規劃演算法的乙個特例,相比動態規劃,使用貪心演算法需要滿足更多的條件 貪心選擇性質 但是效率比動態規劃要高。比如說乙個演算法問題使用暴力解法需要指數級時間,如果能使用動態規劃消除重疊子問題,就可以降到多項式級別的時間,如果滿...
區間排程問題 貪心演算法
問題 有 n 項工作,每項工作分別在 s i 時間開始,在 t i 時間結束 對於每項 工作,你都有可以選擇參與與否。如果選擇了參與,那麼自始自終都必須全程參與。此外,參與工作的時間段不能重疊 即使是開始的瞬間和結束的瞬間的重疊也 是不允許的 include include include usin...
區間排程問題 貪心演算法
一 題目 區間排程問題 有n項工作,每項工作分別在si時間開始,在ti時間結束。對於每項工作,你都可以選擇參與與否。如果選擇了參與,那麼自始至終都必須全程參與。此外,參與工作的時間段不能重複 即使是開始的瞬間和結束的瞬間的重疊也是不允許的 你的目標是參與盡可能多的工作,那麼最多能參與多少項工作呢?1...