農民約翰的n頭奶牛(編號為1..n)計畫逃跑並加入馬戲團,為此它們決定練習表演雜技。
奶牛們不是非常有創意,只提出了乙個雜技表演:
疊羅漢,表演時,奶牛們站在彼此的身上,形成乙個高高的垂直堆疊。
奶牛們正在試圖找到自己在這個堆疊中應該所處的位置順序。
這n頭奶牛中的每一頭都有著自己的重量wi以及自己的強壯程度si。
一頭牛支撐不住的可能性取決於它頭上所有牛的總重量(不包括它自己)減去它的身體強壯程度的值,現在稱該數值為風險值,風險值越大,這只牛撐不住的可能性越高。
您的任務是確定奶牛的排序,使得所有奶牛的風險值中的最大值盡可能的小。
輸入格式
第一行輸入整數n,表示奶牛數量。
接下來n行,每行輸入兩個整數,表示牛的重量和強壯程度,第i行表示第i頭牛的重量wi以及它的強壯程度si。
輸出格式
輸出乙個整數,表示最大風險值的最小可能值。
資料範圍
1≤n≤50000
1≤wi≤10,000
1≤si≤1,000,000,000
輸入樣例:
3
10 3
2 53 3
輸出樣例:
2
貪心: 將每個牛按照 wi + si 從小到大排序,wi + si 越大的牛排在最下面
假設 b放在a上的情況 優於 a放在b上的情況
a牛 w1,s1
b牛 w2,s2
如果要將a牛放在b牛上,b牛的風險是w1 - s2
如果要將b牛放在a牛上,a牛的風險是w2 - s1
那麼一定有: w2 - s1 < w1 - s2 --> w2 + s2 < w1 + s1 則 w + s 越大的越放在後面
#include#includeusing namespace std;
struct cow
}cows[50010];
int main();
}sort(cows,cows + n);
int dang = sum - cows[0].w - cows[0].s;
sum -= cows[0].w;
for (int i = 1; i < n ; ++i)
cout
}
AcWing 125 耍雜技的牛
這是一道不簡單的貪心,難度還是有的,老師的分析方法真的很不錯啊,老師講課 這個牛是垂直擺放的,首先我們對兩個量進行乙個比較 我們先假設後面的是最大值,那我們對兩頭牛,只要滿足wi si include include using namespace std typedef pair int,int ...
ACWing 125 耍雜技的牛
有n nn頭奶牛,編號1 n 1 sim n 1 n,每個奶牛有兩個屬性,自己的重量w iw i wi 和其強壯程度s is i si 它們要表演疊羅漢,乙個疊在另乙個上面,每個奶牛的風險值定義為其上方的所有奶牛的重量之和減去其自己的強壯程度。問如何安排疊羅漢次序可以使得風險值最大的那個奶牛的風險值...
AcWing 125 耍雜技的牛 貪心
題目鏈結 農民約翰的n頭奶牛 編號為1 n 計畫逃跑並加入馬戲團,為此它們決定練習表演雜技。奶牛們不是非常有創意,只提出了乙個雜技表演 疊羅漢,表演時,奶牛們站在彼此的身上,形成乙個高高的垂直堆疊。奶牛們正在試圖找到自己在這個堆疊中應該所處的位置順序。這n頭奶牛中的每一頭都有著自己的重量wi以及自己...