您的位置:首页 > 理论基础 > 计算机网络

HDU4296 2012ACM成都赛区网络赛 Buildings

2012-09-18 08:03 232 查看
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=4296 (贪心)

大意是盖楼的时候先把每个楼层都建好,再以一种最忧的次序堆起来,使各层楼中最大的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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: