洛谷P2949題解

2022-05-12 06:48:10 字數 925 閱讀 9118

若想要深入學習反悔貪心,傳送門。

description:

有 \(n\) 項工作,每 \(i\) 項工作有乙個截止時間 \(d_i\) ,完成每項工作可以得到利潤 \(p_i\) ,求最大可以得到多少利潤。

method:

做這道題的時候並沒有想到反悔貪心,只是想到乙個錯誤的貪心演算法。按照截止時間為第一關鍵字,利潤為第二關鍵字排序,統計一遍即可。

顯然上面的貪心演算法刻印被hack掉。可以先不選擇當前截止時間的利潤,等一下選擇下乙個更大的利潤,這樣可以得到更大的最優解。

但我們發現這個貪心策略錯誤的原因是當前的最優解可能不是全域性最優解,顯然符合反悔貪心的思想。於是我們用乙個反悔堆維護最優解。

假如滿足題設條件(即沒有超出截止時間)就分成兩種情況:若當前的最優解比原來的最優解(堆頂)更優秀,我們就更新全域性最優解,把原來的最優解丟出去,再把當前的最優解放進去(即反悔策略);反之,就不管了。假如不滿足特設條件,就把當前的最優解丟進堆裡,更新全域性最優解即可。

code:

#include#define int long long 

#define maxn 100010

inline void read(int &x)

while(s>='0'&&s<='9')

x*=f;

}using namespace std;

int n;

struct node

sort(job+1,job+n+1);

int ans=0;

for(int i=1;i<=n;i++)

}else//不符合條件

}printf("%lld",ans);

return 0;

}

P2949 工作排程

約翰有太多的工作要做。為了讓農場高效運轉,他必須靠他的工作賺錢,每項工作花乙個單位時間。他的工作日從0時刻開始,有10 9個單位時間。在任一時刻,他都可以選擇編號1 n的n 1 n 10 6 項工作中的任意一項工作來完成。因為他在每個單位時間裡只能做乙個工作,而每項工作又有乙個截止日期,所以他很難有...

洛谷 P1101 題解

這道題可以用深搜 回溯 來寫,相信大部分人都是這麼想的,但是有些人可能在一些地方饒了半天,所以這裡就貼一下我的思路,個人覺得自己的很好懂,除了tx和ty那裡,但是tx和ty的那種用法對於輸出路徑的題目一般很實用 這個算是比較簡單的吧,題目裡給出了具體要找的字串,我們要做的就是對它進行8個方向的搜尋,...

洛谷 P1169 題解

請你在乙個黑白矩陣中選出乙個長方形 含正方形 和正方形的子矩陣,使得所有相鄰的點顏色不一樣。矩陣大小 兩條邊都 2000 2000 2 000輸入 3 31 0 1 0 1 0 1 0 0輸出4 6解釋給定矩陣 正方形 長方形 我的控制台是萌萌噠 ffc0cb粉色 乙個小技巧 如果您的控制台是像我的...