LA 4254 處理器(二分 貪心)

2022-06-20 22:18:13 字數 986 閱讀 4657

題意:有n個任務,每個任務有3個引數ri,di和wi,表示必須在時刻[ri,di]之內執行,工作量為wi。處理器的速度可以為任意值,任務不一定要連續執行,可以分成若干塊,求最大速度的最小值。

思路:最大值的最小值問題可以考慮用二分法來做。

這道題目怎麼判斷速度合法是關鍵,我們可以使用秒為單位來判斷。計算時使用貪心法,d值小的優先處理。用乙個優先佇列(d值小的優先順序高),時間以秒為單位從1開始一次增加,如果乙個任務的r值等於了當前時間t,說明該任務可以開始執行了,那麼就把它加入到佇列中。每個一秒的時間內處理該段時間內可以執行的d值最小的任務。

1 #include2 #include3 #include

4 #include5

using

namespace

std;67

const

int maxn = 10000 + 5;8

9int

n;10

11struct

node

1218

}a[maxn];

1920

bool

cmp(node a, node b)

2124

25bool check(int

speed)

2642 t++;

43if (!q.empty() && q.top().d == t) return

false;44

if (q.empty() && cnt == n) return

true;45

}46}47

48int

main()

4961 sort(a, a +n, cmp);

62int left = 1, right = 100000;63

while (left <=right)

6469 cout << left <71 }

LA4254 二分 貪心 優先佇列

題目 有n個任務,每個任務有三個引數ri,di,wi,表示任務i必須在 ri,di 內執行完,現有一台處理器,處理器執行的速度可以變化,速度為s時,乙個工作量為wi的任務執行的時間為w s,任務不一定連續執行,現在要求求出處理器在執行過程中最大速度的最小值。分析 首先一定是個二分,所以主要的地方在於...

LA 4254 Processor 二分 貪心

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

poj1064(二分處理浮點型別技巧)

translation 給出n條電纜以及他們的長度,要從它們當中切取出k條長度相同的繩子。這k條繩子每條最長能夠有多長?solution 二分即可,浮點型別處理的一些技巧 note 1 注意輸出的時候要做下floor處理 2 二分判斷退出的條件不能是認為切割條數等於k條就退出。這樣求出的不一定是最優...