专栏文章
题解:P6243 [USACO06OPEN] The Milk Queue G
P6243题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mipm56of
- 此快照首次捕获于
- 2025/12/03 14:15 3 个月前
- 此快照最后确认于
- 2025/12/03 14:15 3 个月前
解析:
题目还是比较水的,凭紫有点高,绿差不多。
这是一道明显的贪心题。
首先,遇到这种类型的题,我们第一时间会想到排序。
大致目标已制定,怎么排序又成了一个问题,既然他是要求最小的时间,那很明显,第一道工序和第二道工序的时间要尽可能的平均,所以我们可以取一个 。
例如:
当有两头牛 需要你决定谁先来时,该怎么办?
我们有两种安排,两种安排分别有:
在 的前面:
在 前面:
我们想让前者时间比后者少,那么所列的式子就是: 。
代码如下:
CPPint cmp(cow o,cow p){
return min(o.a,p.b)<min(p.a,o.b);
}
注,这里的 cow 是结构体。
接着就很简单了,我们可以开一个for 循环来统计时间。
统计时间时,扫一遍 的前缀和。每次取前缀和和当前 和 时间的最大值,因为如果 大于 ,说明 FJ 太慢,拉低了 Rob 的速度。然后加上 的时间,即为答案。
代码(马蜂优良):
CPP#include<bits/stdc++.h>
using namespace std;
int n,cnt,ans;
struct cow{
int a,b;
}x[100001];
int cmp(cow o,cow p){
return min(o.a,p.b)<min(p.a,o.b);
}
int main(){
scanf("%d",&n);
for(int i=1,xx,yy;i<=n;i++)
scanf("%d%d",&xx,&yy),x[i].a=xx,x[i].b=yy;
sort(x+1,x+n+1,cmp);
for(int i=1;i<=n;i++)
cnt+=x[i].a,ans=max(ans,cnt)+x[i].b;
printf("%d",ans);
}
完结撒花,谢谢,点个赞吧
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...