LA4254 二分 貪心 優先佇列

2021-08-25 02:39:56 字數 990 閱讀 3453

題目:有n個任務,每個任務有三個引數ri,di,wi,表示任務i必須在[ri, di]內執行完,現有一台處理器,處理器執行的速度可以變化,速度為s時,乙個工作量為wi的任務執行的時間為w/s,任務不一定連續執行,現在要求求出處理器在執行過程中最大速度的最小值。

分析:首先一定是個二分,所以主要的地方在於check函式怎麼寫。假設某一時刻的速度為v,不難想到,如果貪心的選擇結束時間距離當前時刻最近的任務執行(這裡需要用到優先佇列),一定是最優的,並且這樣還可以避免浮點數運算。

ps:優先佇列使用

**如下:

#include 

#include

#include

#include

#include

#define db double

using

namespace

std;

const

int maxn = 10000 + 10;

const

int inf = (int)1e9;

struct node

}a[maxn];

int n, mint, maxt;

priority_queueq;

bool cmp(node a, node b)

bool check(int var)

if (tmp.r <= tim) return

false;

if (tmp.w <= var) var -= tmp.w;

else }}

return q.empty();

}int main()

sort(a, a + n, cmp);

int l = 0, r = sumw, ans;

while (l <= r) else l = m + 1;

}printf("%d\n", ans);

}return

0;}

LA 4254 處理器(二分 貪心)

題意 有n個任務,每個任務有3個引數ri,di和wi,表示必須在時刻 ri,di 之內執行,工作量為wi。處理器的速度可以為任意值,任務不一定要連續執行,可以分成若干塊,求最大速度的最小值。思路 最大值的最小值問題可以考慮用二分法來做。這道題目怎麼判斷速度合法是關鍵,我們可以使用秒為單位來判斷。計算...

LA 4254 Processor 二分 貪心

acm icpc live archive 這道題搞了我兩天,最終還是搞出來了!很容易就可以發現這題是二分,不過二分後怎麼貪心就稍微有點難想了。貪心的方法其實很簡單,就是盡量先把結束的早的任務先盡早的完成了。如果在給定的處理器速度下不能完成所有任務,那麼這個速度就還不夠。我的方法是用線段樹填充盡量靠...

Processor 二分搜尋,優先佇列

題意 給出n個任務完成區間以及工作量,求出最快處理速度.思路 用二分搜尋匹配最優速度,其中還用到優先佇列輔助.列舉所有截止時間,在此時間內的都進隊,按照工作截止時間越早越先出隊,如果截止時間不及列舉的截止時間,則錯過 include include include include includeus...