貪心基礎入門講解五 任務執行順序

2022-04-10 17:57:41 字數 2057 閱讀 8954

分析: 本題可以抽象成,從乙個整數開始,每次減去a,再加上b (a,b都是正數),要求每次操作都不產生負數。

針對本題a[i] = r[i], b[i] = r[i] – o[i],注意o[i] < r[i],我們有0

我們給出標準答案——按照b[i]不增的順序排序,是最「有利」的。

為了定義「有利」,我們這樣證明我們的結論:

如果對於b[0]>=b[1] >=…>=b[x] < b[x + 1] 

(a[0],b[0])….(a[x], b[x]) (a[x + 1], b[x + 1])的組合可以不產生負數,則我們交換b[x]和b[x + 1]也可以不產生負數。

證明:交換(a[x], b[x])和(a[x + 1], b[x + 1])對x + 1更有利了,因為每個括號實際上是乙個負數,所以越早安排這個括號,被減數就越大,就越不容易形成負數。

關鍵看(a[x],b[x])移動到後面會不會產生負數。

那其實是看之前的結果 -a[x + 1] + b[x + 1] – a[x]會不會產生負數,(注意-a[x + 1] + b[x + 1]不會產生負數,因為我們剛才已經證明了,對x + 1更有利)

而我們知道之前的結果-a[x] + b[x] – a[x + 1]不會產生負數(因為我們的假設就是這樣),而b[x + 1] > b[x],所以前者更大,所以-a[x + 1] + b[x + 1] – a[x]不會產生負數。

因此我們證明了交換之後仍然不產生負數,也就是原先不產生負數,我們交換後仍然不產生負數。

而經過若干次這樣的交換之後,我們肯定會把序列交換成按照b的不增順序排序的。從而我們證明了,任何可行的方案都不好於按照b不增順序排序的序列執行的方案,從而證明了我們的貪心策略是有效的。

很奇怪的策略——我們只考慮了b,居然能得到最優策略。可見貪心演算法還是需要感覺,大膽假設,小心求證。

輸入

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

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

輸出

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

輸入示例

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

輸出示例

135

請選取你熟悉的語言,並在下面的**框中完成你的程式,注意資料範圍,最終結果會造成int32溢位,這樣會輸出錯誤的答案。

不同語言如何處理輸入輸出,請檢視下面的語言說明。

#include#include

#include

using

namespace

std;

struct

stu;

stu cas[

100010

];

intcmp(stu x,stu y)

intmain()

sort(cas,cas+n,cmp);

sum=cas[0

].a;

ans=cas[0

].a;

for(i=0;i)

sum=sum-cas[i].a+cas[i].b;

} printf(

"%d\n

",ans);

} return

0;

}

如果對你有所幫助,別忘了加好評哦;麼麼噠!!下次見!88

51Nod1099 任務執行順序(貪心)

剛開始是以為r最大的在前面,排序,結果只對了幾個測試案例,然後看了下面的思路,頓悟了。假設只有兩個任務,那麼就兩種結果,先執行a,後執行b。或者先執行b,後執行a。前者的結果是 max a.oper,a.store b.oper 後者的結果是 max b.oper,b.store a.oper 這個...

51nod 1099 任務執行順序 貪心的構造方法

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

51NOD 1099 任務執行順序 貪心思想

1.0 秒 131,072.0 kb 20 分 3級題有n個任務需要執行,第i個任務計算時佔r i 個空間,而後會釋放一部分,最後儲存計算結果需要佔據o i 個空間 o i r i 例如 執行需要5個空間,最後儲存需要2個空間。給出n個任務執行和儲存所需的空間,問執行所有任務最少需要多少空間。收起第...