約翰有太多的工作要做。為了讓農場高效運轉,他必須靠他的工作賺錢,每項工作花乙個單位時間。 他的工作日從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...