51nod 1099 任務執行順序

2021-08-18 04:05:43 字數 1547 閱讀 3332

1099 任務執行順序

基準時間限制:1 秒 空間限制:131072 kb 分值: 20 

難度:3級演算法題

有n個任務需要執行,第i個任務計算時佔r[i]個空間,而後會釋放一部分,最後儲存計算結果需要佔據o[i]個空間(o[i] < r[i])。

例如:執行需要5個空間,最後儲存需要2個空間。給出n個任務執行和儲存所需的空間,問執行所有任務最少需要多少空間。

input

第1行:1個數n,表示任務的數量。(2 <= n <= 100000)

第2 - n + 1行:每行2個數r[i]和o[i],分別為執行所需的空間和儲存所需的空間。(1 <= o[i] output

輸出執行所有任務所需要的最少空間。

input示例

20

14 1

2 111 3

20 4

7 56 5

20 7

19 8

9 420 10

18 11

12 6

13 12

14 9

15 2

16 15

17 15

19 13

20 2

20 1

output示例

135
思路:1.對於兩組操作 (r[1],o[1]),(r[2],o[2])

若先操作 r[1] : max(r[1],r[2]+o[1])

若先操作 r[2]:max(r[2],r[1]+o[2])

因此 ans=min(r[2]+o[1],r[1]+o[2]).

若 r[2]+o[1]2.對於本題可以轉換成 乙個整數ans減去 a[i],加上b[i] ,(a[i],b[i]均為正整數),過程中 ans不能為負數.

而 a[i]=r[i],b[i]=r[i]-o[i],那麼容易想到 先對 a[n],b[n]組中 b[i]最大的進行操作

因為 ans每次操作都在減小,那麼應該先加上 b[i]最大的,下面簡單證明:

設有兩組 (a1,b1),(a2,b2)

若選擇 a1先操作:max(a1,a1+a2-b1)  a2>b1

若選擇 a2先操作:max(a2,a1+a2-b2)  a1>b2

又b1,b2不可能同時大於a2,a1.則 ans=min(a1+a2-b1,a1+a2-b2);    故 取 b1,b2中最大的乙個

code:

#include#includeusing namespace std;

struct node

};const int max_n=100005;

int n;

node c[max_n];

int main()

{ ios::sync_with_stdio(false);

cin>>n;

for(int i=0;i>c[i].a>>c[i].b;

sort(c,c+n);

int ans=0,sum=0;

for(int i=0;i

51NOD 1099 任務執行順序

1099 任務執行順序 基準時間限制 1 秒 空間限制 131072 kb 分值 20 難度 3級演算法題 有n個任務需要執行,第i個任務計算時佔r i 個空間,而後會釋放一部分,最後儲存計算結果需要佔據o i 個空間 o i r i 例如 執行需要5個空間,最後儲存需要2個空間。給出n個任務執行和...

51 nod 1099 任務執行順序

有n個任務需要執行,第i個任務計算時佔r i 個空間,而後會釋放一部分,最後儲存計算結果需要佔據o i 個空間 o i r i 例如 執行需要5個空間,最後儲存需要2個空間。給出n個任務執行和儲存所需的空間,問執行所有任務最少需要多少空間。input 第1行 1個數n,表示任務的數量。2 n 100...

51nod 1099 任務執行順序

1099 任務執行順序 基準時間限制 1 秒 空間限制 131072 kb 分值 20 難度 3級演算法題 有n個任務需要執行,第i個任務計算時佔r i 個空間,而後會釋放一部分,最後儲存計算結果需要佔據o i 個空間 o i r i 例如 執行需要5個空間,最後儲存需要2個空間。給出n個任務執行和...