1 #include <iostream> 2 #include <cstring> 3 #include <cstdio> 4 #include <algorithm> 5 6 using namespace std; 7 8 #define maxn 100005 9 10 struct blo 11 { 12 int w; 13 int d; 14 }block[maxn]; 15 16 bool cmp(const blo&a,const blo&b) 17 { 18 return a.w+a.d<b.w+b.d; 19 } 20 21 int main() 22 { 23 int n; 24 while(scanf("%d",&n) != EOF) 25 { 26 for(int i=0;i<n;i++) 27 scanf("%d%d",&block[i].w,&block[i].d); 28 sort(block,block+n,cmp); 29 __int64 sum=block[0].w; 30 __int64 ans=0; 31 for(int i=1;i<n;i++) 32 { 33 __int64 tmp = sum - block[i].d; 34 if(tmp>ans) 35 ans=tmp; 36 sum+=block[i].w; 37 } 38 printf("%I64d\n",ans); 39 } 40 return 0; 41 42 }
悲剧的孩子啊,,,比赛的时候把题意搞错了,,其实是使得最大的PDV尽可能地小,想想常理也该这样的,我们竟然求和了。以为是和最少。o(︶︿︶)o 唉。