大意是盖楼的时候先把每个楼层都建好,再以一种最忧的次序堆起来,使各层楼中最大的PDV最小。
最底层的PDV = 上面各层的w之和 - 最底层的s = 所有楼层的w之和 - 最底层的(w+s);
所以,楼层(w+s)越大的越靠下,这样就是最优解。且最大的PDV就是底层的PDV。
比赛的时候没过,忘了溢出的情况,注意要用__int64。
#include<iostream> //#include<fstream> #include<algorithm> using namespace std; int cmp(int& x,int& y) { return y < x; } int main() { //ifstream cin("in.txt"); int n; __int64 sumw,w,s,maxwei,wei; while (cin>>n) { sumw = 0; maxwei = 0; for(int i = 0;i < n; i ++) { cin>>w; sumw += w; cin>>s; wei = w + s; if(wei > maxwei) maxwei = wei; } sumw -= maxwei; if(sumw >0) cout<<sumw<<endl; else cout<<0<<endl; } }