P1561 [USACO12JAN] Mountain Climbing S

传送门

题目描述

约翰农夫发现他的奶牛在进行剧烈运动时会产出更高质量的牛奶。因此,他决定让他的 N N N 头奶牛( 1 ≤ N ≤ 25 , 000 1 \le N \le 25,000 1≤N≤25,000)去爬一座附近的山,然后再下来!

第 i i i 头奶牛需要 U ( i ) U(i) U(i) 的时间爬上山,然后需要 D ( i ) D(i) D(i) 的时间爬下山。由于奶牛是家养的,每头奶牛在爬山的每一段路程中都需要农夫的帮助,但由于经济不景气,只有两位农夫可用,即约翰农夫和他的表弟唐农夫。约翰农夫计划指导奶牛上山,而唐农夫将指导奶牛下山。由于每头奶牛都需要一个向导,并且每段旅程中只有一位农夫,因此在任何时间点,最多只有一头奶牛可以在约翰农夫的帮助下爬上山,最多只有一头奶牛可以在唐农夫的帮助下爬下山。奶牛可能会在山顶暂时聚集,如果它们爬上山后需要等待唐农夫的帮助才能下山。奶牛下山的顺序可以与上山的顺序不同。

请确定所有 N N N 头奶牛完成整个旅程所需的最短时间。

输入格式

第一行,一个整数 N N N。

第 2 2 2 到第 N + 1 N+1 N+1 行,每行两个用空格隔开的整数 U ( i ) U(i) U(i) 和 D ( i ) D(i) D(i)。

( 1 ≤ U ( i ) , D ( i ) ≤ 50 , 000 ) (1 \le U(i),D(i) \le 50,000) (1≤U(i),D(i)≤50,000)。

输出格式

一行一个整数,表示所有 N N N 头奶牛完成旅程的最短时间。

输入输出样例 #1

输入 #1

复制代码
3
6 4
8 1
2 3

输出 #1

复制代码
17

思路

考虑贪心算法,此题就是因为证明难度大才评为紫题,作者比较菜,所以不会证,但代码较简单。

代码

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int n;
struct did
{
	int a,b;
}p[30001];
bool cmp(did x,did y)
{
	if(x.a<x.b)
	{
		if(y.a<y.b) 
			return x.a<y.a;
		return 1;
	}
	else
	{
		if(y.a<y.b) 
			return 0;
		return x.b>y.b;
	}
}
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
		cin>>p[i].a>>p[i].b;
	sort(p+1,p+1+n,cmp);
	int A=0,B=0;
	for(int i=1;i<=n;i++)
	{
		A+=p[i].a;
		if(B<A)
			B=A;
		B+=p[i].b;
	}
	cout<<B;
	return 0;
}

注意

此题还有多倍经验。
P1248B4156P2123P6243

相关推荐
zB6822HbX2 天前
狙击模拟《Center Mass: Streets of Ramadi》Steam页面 发售日待定
贪心算法·排序算法·动态规划
承渊政道2 天前
【贪心算法】(经典实战应用解析(二):最⻓递增⼦序列、递增的三元⼦序列、最⻓连续递增序列、买卖股票的最佳时机、买卖股票的最佳时机II)
数据结构·c++·学习·算法·leetcode·贪心算法·哈希算法
鱼子星_3 天前
最短路问题【图论】
数据结构·算法·贪心算法·动态规划·图论
承渊政道3 天前
【贪心算法】(经典实战应用解析(一):柠檬水找零、将数组和减半的最少操作次数、最大数、摆动序列)
数据结构·c++·学习·算法·leetcode·贪心算法·排序算法
汉克老师3 天前
GESP6级C++考试语法知识(四、图与树(四))
c++·贪心算法·优先队列·哈夫曼编码·哈夫曼树·gesp6级·gesp六级
样例过了就是过了4 天前
LeetCode热题100 多数元素
c++·算法·leetcode·贪心算法
li星野5 天前
双指针 & 贪心算法六题通关:从回文串到跳跃游戏(Python + C++)
python·游戏·贪心算法
我是无敌小恐龙5 天前
Java基础入门Day10 | Object类、包装类、大数/日期类、冒泡排序与Arrays工具类 超详细总结
java·开发语言·数据结构·算法·贪心算法·排序算法·动态规划
多加点辣也没关系7 天前
数据结构与算法|第十七章:贪心算法
数据结构·算法·贪心算法
脑子加油站7 天前
K8S-Ingress资源对象
算法·贪心算法·k8s