题目描述
n头牛,每头牛有重量wi和强壮程度si,牛与牛之间垂直堆叠,每头牛的风险值是他上面不包括他自己所有牛的重量之和减他的强壮程度,求所有奶牛风险值中的最大值尽可能的小
数据范围
1≤N≤50000
1≤wi≤10,000
1≤si≤1,000,000,000
思路

#include<limits.h>
#include<iostream>
#include<algorithm>
using namespace std;
typedef pair<int,int> PII;
PII cow[50010];
int main()
{
int i,n;
cin>>n;
for(i=1;i<=n;i++)
{
int w,s;
cin>>w>>s;
cow[i]={w+s,s};
}
sort(cow+1,cow+n+1);
int res=INT_MIN,sum=0;
for(i=1;i<=n;i++)
{
int w=cow[i].first-cow[i].second,s=cow[i].second;
res=max(sum-s,res);
sum+=w;
}
cout<<res;
return 0;
}
本文介绍了一个涉及排序和优化的问题,目标是安排n头牛的堆叠顺序,使得所有奶牛的风险值中的最大值尽可能小。每头牛有两个属性:重量wi和强壮程度si,风险值由其上方牛的总重量减去自身的强壮程度计算。通过将牛按总重量(权重)和强壮程度排序,然后计算累计重量并找出最大风险值,可以找到最优解。程序使用C++实现,通过排序和迭代求解问题。
432

被折叠的 条评论
为什么被折叠?



