剛開始是以為r最大的在前面,排序,結果只對了幾個測試案例,然後看了下面的思路,頓悟了。
假設只有兩個任務,那麼就兩種結果,先執行a,後執行b。或者先執行b,後執行a。
前者的結果是 max(a.oper,a.store+b.oper)
後者的結果是 max(b.oper,b.store+a.oper)
這個時候可以知道,結果一定是min( a.store+b.oper , b.store+a.oper )
假設a.store + b.oper < b.store + a.oper 。產生這樣結果的原因是 先執行a,後執行b的順序
所以有b.oper - b.store < a.oper - a.store。所以可知,排序的時候要將 store-oper 這個差值大的放前面,讓它先執行,這樣就能取到最小值。
原文:
#include#include#include#include#includeusing namespace std;
struct nodea[100000];
bool cmp(node a,node b)
int main()
cout
}
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個任務執行和...