[hdu] 4296 Buildings
【题目】http://acm.hdu.edu.cn/showproblem.php?pid=4296
【题意】求最小的最大层的危险性
【算法】贪心
【题解】重量和力度大的放下面。
【注意】would like to minimize PDV of the whole building, denoted as the largest PDV of all floors是最小最大值。
要用%I64d进行输出,%lld是错的
【测试】
4
0 3
3 0
2 1
1 2
0
1
2 1
2
1 2
2 1
ans:
3
0
0
0
【代码】
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
struct node{
int w,s;
}a[100010];
int cmp(node s1,node s2){
return s1.w+s1.s<s2.w+s2.s;
}
int main(){
int n,i;
long long s,w;
while(scanf("%d",&n)!=EOF){
for(i=0;i<n;i++)scanf("%d%d",&a[i].w,&a[i].s);
sort(a,a+n,cmp);
s=(long long)0;
w=(long long)a[0].w;
for(i=1;i<n;i++){
if(w-(long long)a[i].s>s)s=w-(long long)a[i].s;
w+=(long long)a[i].w;
}
printf("%I64d\n",s);
}
return 0;
}
【心得】有读错题了,对不起所有人。