洛谷 P1842 奶牛玩杂技 题解
P1842 奶牛玩杂技
题目背景
Farmer John 养了N(1<=N<=50,000)头牛,她们已经按1~N依次编上了号。FJ所不知道的是,他的所有牛都梦想着从农场逃走,去参加马戏团的演出。可奶牛们很快发现她们那笨拙的蹄子根本无法在钢丝或晃动的的秋千上站稳(她们还尝试过把自己装在大炮里发射出去,但可想而知,结果是悲惨的) 。最终,她们决定练习一种最简单的杂技:把所有牛都摞在一起, 比如说, 第一头牛站在第二头的身上, 同时第二头牛又站在第三头牛的身上...最底下的是第 N头牛。
题目描述
每头牛都有自己的体重以及力量,编号为 i 的奶牛的体重为
W_i(1<=W_i<=10,000),力量为 S_i(1<=S_i<=1,000,000,000)。
当某头牛身上站着另一些牛时它就会在一定程度上被压扁,我们不妨把它被压扁的程度叫做它的压扁指数。对于任意的牛,她的压扁指数等于摞在她上面的所有奶牛的总重(当然不包括她自己)减去它的力量。奶牛们按照一定的顺序摞在一起后, 她们的总压扁指数就是被压得最扁的那头奶牛的压扁指数。
你的任务就是帮助奶牛们找出一个摞在一起的顺序,使得总压扁指数最小。
输入格式
第一行:N
接下来N行,每行两个数:Wi和Si
输出格式
最小总压扁指数
输入输出样例
输入 #1
3
10 3
2 5
3 3
输出 #1
2
【前缀知识】
贪心
正常我们看到的贪心是只有一个变量的
但是这道题目有两个
奶牛的重量和奶牛的力气
用贪心的思维来思考一下
重量大的是不是应该放的更靠下?
放的越靠下他的大重量影响的奶牛就越少
所以 \(W_i\) 越大就越要越往下放
那么,奶牛力气越大的就越往下放是不是也是类似的道理?
力气越大能够支持的重量越多,
所以收重量的影响就越小,
为了让最大值最小就应该让力气大的去承受更多的重量
因为一个力气小的 \(S_1\) 和一个 力气大的 \(S_2\) 去承受同样的重量
\(W - S_1\) < \(W - S_2\)
所以力气越大的就应该越往下放
这个时候就有两个需要贪心的了
【证明过程】
假设只有两只奶牛,一只奶牛的重量为 \(W_1\) ,力气为 \(S_1\)
另一只奶牛的重量为 \(W_2\) ,力气为 \(S_2\)
如果前者在下
压扁指数即为 \(W_2 - S_1\)
如果后者在下
压扁指数即为 \(W_1 - S_2\)
假设前者在下更优
即为前者在下压扁指数更小
那么
\(W_2 - S_1 < W_1 - S_2\)
移项的
\(W_2 + S_2 < W_1 + S_1\)
这个时候是处于前者在下更优的情况下
所以得出结论
\(W_i + S_i\)越大就应该越往下放
【引出】
这只是有两只奶牛的情况
可以通过这个类比出多个奶牛的情况所以
这个结论适用
【完整代码】
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int Max = 50005;
struct node
{
int w,s;
}a[Max];
bool cmp(const node x,const node y)
{
return x.w + x.s < y.w + y.s;
}
int M = 0x7fffffff;
int main()
{
int n;
cin >> n;
for(int i = 1;i <= n;++ i)
cin >> a[i].w >> a[i].s,M = min(M,a[i].s);//如果只有一个的话那就输出他的力气的负数所以这里需要找出最大的力气
M = -M;
sort(a + 1,a + 1 + n,cmp);
int tot = a[1].w;
for(int i = 2;i <= n;++ i)
{
M = max(M,tot - a[i].s);
tot += a[i].w;
}
cout << M << endl;
return 0;
}
洛谷 P1842 奶牛玩杂技 题解的更多相关文章
- [洛谷P1842] 奶牛玩杂技
题目类型:贪心+证明,经典题 传送门:>Here< 题意:有\(N\)头奶牛,每个奶牛有一个重量\(W[i]\),力量\(S[i]\).定义每个奶牛的压扁程度为排在它前面的所有奶牛的总量之 ...
- p1842 奶牛玩杂技 题解
感觉其他dalao讲的不是很明白啊,我这样的蒟蒻看不懂啊. 在luogu这个dalao遍地的地方我蒟蒻看个题解也不明白,我为跟我同病相怜的蒟蒻写一篇吧 其实真是不太明白,大部分题解都是只说 体重大的在 ...
- 洛谷 P1296奶牛的耳语 题解
题目传送门 这道题很显然可以用O(n2)的方法来做(记得排序),由于数据较水...但还是在for循环中加一些优化:++i,据说这样会快一些... #include<bits/stdc++.h&g ...
- 洛谷P2402 奶牛隐藏
洛谷P2402 奶牛隐藏 题目背景 这本是一个非常简单的问题,然而奶牛们由于下雨已经非常混乱,无法完成这一计算,于是这个任务就交给了你.(奶牛混乱的原因看题目描述) 题目描述 在一个农场里有n块田地. ...
- 洛谷2344 奶牛抗议(DP+BIT+离散化)
洛谷2344 奶牛抗议 本题地址:http://www.luogu.org/problem/show?pid=2344 题目背景 Generic Cow Protests, 2011 Feb 题目描述 ...
- 洛谷P1783 海滩防御 分析+题解代码
洛谷P1783 海滩防御 分析+题解代码 题目描述: WLP同学最近迷上了一款网络联机对战游戏(终于知道为毛JOHNKRAM每天刷洛谷效率那么低了),但是他却为了这个游戏很苦恼,因为他在海边的造船厂和 ...
- 洛谷P4047 [JSOI2010]部落划分题解
洛谷P4047 [JSOI2010]部落划分题解 题目描述 聪聪研究发现,荒岛野人总是过着群居的生活,但是,并不是整个荒岛上的所有野人都属于同一个部落,野人们总是拉帮结派形成属于自己的部落,不同的部落 ...
- 洛谷P1155 双栈排序题解(图论模型转换+二分图染色+栈)
洛谷P1155 双栈排序题解(图论模型转换+二分图染色+栈) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1311990 原题地址:洛谷P1155 双栈排序 ...
- 洛谷P2402 奶牛隐藏(网络流,二分答案,Floyd)
洛谷题目传送门 了解网络流和dinic算法请点这里(感谢SYCstudio) 题目 题目背景 这本是一个非常简单的问题,然而奶牛们由于下雨已经非常混乱,无法完成这一计算,于是这个任务就交给了你.(奶牛 ...
随机推荐
- COGS 有标号的DAG/强连通图计数
COGS索引 一堆神仙容斥+多项式-- 有标号的DAG计数 I 考虑\(O(n^2)\)做法:设\(f_i\)表示总共有\(i\)个点的DAG数量,转移考虑枚举DAG上所有出度为\(0\)的点,剩下的 ...
- PKUSC2019题解
$D1T1$:$n$个村庄,第$i$个村庄的人要去第$p_i$个村庄(保证$p_i$为排列),每次可以将相邻两个村庄的人位置交换直到所有人都到达目的地.再给定一个长为$n-1$的排列$a$,表示第$i ...
- Maven过滤属性文件,替换属性值
pom.xml 1.resources: resources中是定义哪些目录下的文件会被配置文件中定义的变量替换,一般我们会把项目的配置文件放在src/main/resources下,像db,bean ...
- 保研经验帖----江西师范大学 to 华中科技大学
呼,距离拿到华科cs的offer也有一段时间,有好几次准备动手写这篇经验帖,但就是理不清自己想表达什么,今早起来状态还不错,洗漱的时候思路居然通透了,哈哈哈~ 一.基本情况 先简单介绍笔者的一些基本情 ...
- java 获取手机归属地,引起net.UnknownHostException错误
这个问题是请求,重定向了,跟入源码.修改了地址,变成302 Connection connect = Jsoup.connect(url); connect.header("Host&quo ...
- 5_PHP数组_3_数组处理函数及其应用_5_数组遍历语言结构
以下为学习孔祥盛主编的<PHP编程基础与实例教程>(第二版)所做的笔记. 数组遍历语言结构 1. foreach ( array as $value ) 程序: <?php $int ...
- Python学习日记(二十四) 继承
继承 什么是继承?就是一个派生类(derived class)继承基类(base class)的字段和方法.一个类可以被多个类继承;在python中,一个类可以继承多个类. 父类可以称为基类和超类,而 ...
- Android笔记(五十) Android中的JSON数据
JSON是什么: JSON是轻量级的文本数据交换格式 JSON独立于语言和平台 JSON具有自我描述性,更容易理解 JSON语法: 数据在名称/值对中 数据由逗号分割 大括号表示对象 中括号表示数组 ...
- 修改ActiveMQ的内存大小
有时我们需要修改ActiveMQ的内存大小,防止内存溢出! 修改配置文件下-Xmx参数然后重启mq即可: /fs01/apache-activemq-5.15.0/bin/env ACTIVEMQ_O ...
- 自制php操作mysql工具类(DB.class.php)
DB.class.php <?php class DB{ //主机地址 var $host; //用户名 var $username; //密码 var $password; //数据库名 va ...