HDU4296 2012ACM成都赛区网络赛 Buildings

大意是盖楼的时候先把每个楼层都建好,再以一种最忧的次序堆起来,使各层楼中最大的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;            
    }
}
本博客所有博文,若无专门说明皆为原创,转载请注明作者和出处!
原文地址:https://www.cnblogs.com/ifinver/p/2706472.html