洛谷 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) 题目 题目背景 这本是一个非常简单的问题,然而奶牛们由于下雨已经非常混乱,无法完成这一计算,于是这个任务就交给了你.(奶牛 ...
随机推荐
- 关于base64的一个小细节
Base64出现\r\n的问题 前段时间遇到这么一个小问题: 后台接口返回一个图片的base64串,同事拿着这个字符串,找了一个在线图片和Base64字符串互转的工具网站,想将字符串转成图片,死活转不 ...
- C#使用Selenium
介绍: Selenium 是一个用于Web应用程序测试的工具.Selenium测试直接运行在浏览器中,就像真正的用户在操作一样.支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla ...
- kubernetes第五章--创建资源的两种方式
- JavaScript之获取标签
(1)html <p id="txt">这是P标签</p> <h1 id="txt" style="color: red ...
- ios开发之NSData
NSData用于保存字节数组. 初始化 - (instancetype)initWithBytesNoCopy:(void *)bytes length:(NSUInteger)length free ...
- Android笔记(三十七) 如何停止AsyncTask?
当我们加载一张图片的时候,加载的过程中我们想要取消操作,该怎么办呢?调用Asynctask的 cancel() 方法就可以了,我们看代码: 先看一个例子: MainAciticty.java pack ...
- 分布式结构化存储系统-HBase应用案例
分布式结构化存储系统-HBase应用案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 为了让读者更进一步了解HBase在实际生成环境中的应用方法,在董西成的书里介绍两个经典的HB ...
- 从SVN资源库下载项目
1.这个操作和新建Import导入项目差不多,先左上角File--Import--SVN(这个在弹出窗口的下面)平时都是选最上面的General,再点从SVN检出项目. 2.创建新的资源库位置,然后输 ...
- Kotlin对象表达式要点与Lambda表达式
Kotlin对象表达式要点揭密: 在上一次https://www.cnblogs.com/webor2006/p/11352421.html中学习了Kotlin的对象表达式,它主要是解决Java中匿名 ...
- Kotlin星投影与泛型约束详解
星投影(star projection): 继续来学习Kotlin泛型相关的东东,星投影(star projection),这是个啥东东呢?下面先来说一下概念: 1.对于Star<out T&g ...