www 被大佬们|

wscqwq

园龄:2年粉丝:2关注:3

1

耍杂技的牛

思路

考虑将牛排序后的最优序列是 [w1,w2,,wn][s1,s2,,sn]。考虑交换任意一对 wi,si,wi+1,si+1,因为交换前后除这两者外答案都不变,所以不需要管。交换前为 si,wisi+1
交换后为

si+1,wi+1si

因为 w0,可以忽略 si,si+1,交换前后的大小关系取决于 wisi+1wi+1si 的关系。左右同时加上 si+si+1,则变为 wi+si,wi+1+si+1,所以可以直接按照 wi+si 进行排序。

#include<bits/stdc++.h>
using namespace std;
const int N=50010;
int n;
struct cow{
	int w,s;
	bool operator<(const cow&b)const{
		return w+s<b.w+b.s;
	}
}c[N];
int main(){
	scanf("%d",&n);
	for(int i=1;i<=n;++i){
		int a,b;
		scanf("%d%d",&a,&b);
		c[i]={a,b};
	}
	sort(c+1,c+1+n);
	long long sum=0,ans=-1e18;
	for(int i=1;i<=n;++i){
		ans=max(ans,sum-c[i].s);
		sum+=c[i].w;
	}
	printf("%lld",ans);
    return 0;
}

本文作者:wscqwq

本文链接:https://www.cnblogs.com/wscqwq/p/17135457.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   wscqwq  阅读(11)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起