P2949 工作排程

2021-09-25 06:41:24 字數 1095 閱讀 4460

約翰有太多的工作要做。為了讓農場高效運轉,他必須靠他的工作賺錢,每項工作花乙個單位時間。 他的工作日從0時刻開始,有10^9個單位時間。在任一時刻,他都可以選擇編號1~n的n(1 <= n <= 10^6)項工作中的任意一項工作來完成。 因為他在每個單位時間裡只能做乙個工作,而每項工作又有乙個截止日期,所以他很難有時間完成所有n個工作,雖然還是有可能。 對於第i個工作,有乙個截止時間d_i(1 <= d_i <= 10^9),如果他可以完成這個工作,那麼他可以獲利p_i( 1<=p_i<=10^9 ). 在給定的工作利潤和截止時間下,約翰能夠獲得的利潤最大為多少.

3210

1517

17
明顯的一道貪心題,考慮排序先做截止時間早的,但我們發現後面可能會出現價值更高卻沒有時間做的情況。

於是我們想到用堆,如果當前放不下且當前價值高於已做工作中的最小價值,則刪去它加入當前值

#include

#define m(a,b) memset(a,b,sizeof(a))

#define inf 0x3f3f3f3f

#define mod 19650827

using

namespace std;

inline

void

read

(int

&x)while

(ch>=

'0'&& ch<=

'9')

if(c==

'-')x=

-x;}

struct node

} a[

100005];

inline

bool

cmp(node a,node b)

int n,i;

long

long ans;

priority_queue q;

intmain()

}else q.

push

(a[i]

),ans+

=a[i]

.v; cout<'\n'

;return0;

}

洛谷P2949題解

若想要深入學習反悔貪心,傳送門。description 有 n 項工作,每 i 項工作有乙個截止時間 d i 完成每項工作可以得到利潤 p i 求最大可以得到多少利潤。method 做這道題的時候並沒有想到反悔貪心,只是想到乙個錯誤的貪心演算法。按照截止時間為第一關鍵字,利潤為第二關鍵字排序,統計一...

機器工作排程

acm模版 2臺機器,n件任務,必須先在s1上做,再在s2上做.任務之間先做後做任意.求最早的完工時間.這是乙個經典問題 2臺機器的情況下有多項式演算法 johnson演算法 3臺或以上的機器是np hard演算法。johnson演算法 1 把作業按工序加工時間分成兩個子集,第乙個集合中在s1上做的...

Crontab工作排程

systemctl status crond ps ax grep cron 命令 crontab u 使用者 crontab l 列出cron服務的詳細內容 crontab r 刪除cron服務 crontab e 編輯cron服務 比如說root檢視自己的cron設定 crontab u roo...