洛谷 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) 题目 题目背景 这本是一个非常简单的问题,然而奶牛们由于下雨已经非常混乱,无法完成这一计算,于是这个任务就交给了你.(奶牛 ...
随机推荐
- Python之TensorFlow的模型训练保存与加载-3
一.TensorFlow的模型保存和加载,使我们在训练和使用时的一种常用方式.我们把训练好的模型通过二次加载训练,或者独立加载模型训练.这基本上都是比较常用的方式. 二.模型的保存与加载类型有2种 1 ...
- flutter isolate demo
main.dart import 'package:flutter/material.dart'; import 'package:flutter_isolate/flutter_isolate.da ...
- 为新装的Centos 7X更换源,升级VIM失败,待解决
CentOS 7X使用阿里云CentOS的yum源 1.备份原有repo文件 #cd /etc/yum.repos.d #mv /etc/yum.repos.d/CentOS-Base.repo /e ...
- Python多版本环境搭建(Linux系统)
python Linux 环境 (版本隔离工具) 首先新建用户,养成良好习惯 useradd python 1.安装pyenv GitHub官网: https://github.c ...
- [ipsec][crypto] 有点不同的数字证书到底是什么
前言 前言是在写完了全文之后回头补的.本意是想完全抽象的把证书的抽象逻辑意义表达出来,因为你能找到的大部分 资料都深陷在技术细节与行业规范里.只有其型没有其理,没有什么比理解一个事物的内在合理性更有乐 ...
- (Linux基础学习)第二章:CentOS7.4安装教程
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 ...
- SQL 执行 底层原理(一)
一.SQL Server组成部分 1.关系引擎:主要作用是优化和执行查询.包含三大组件: (1)命令解析器:检查语法和转换查询树. (2)查询执行器:优化查询. (3)查询优化器:负责执行查询. 2. ...
- centos7安装redis 并配置在后台启动
官网 https://redis.io/download 先进入 目录 /usr/local 1 下载文件包 $ wget http://download.redis.io/releases/red ...
- 小程序框架之逻辑层App Service
小程序开发框架的逻辑层使用 JavaScript 引擎为小程序提供开发者 JavaScript 代码的运行环境以及微信小程序的特有功能. 逻辑层将数据进行处理后发送给视图层,同时接受视图层的事件反馈. ...
- [08001] Could not create connection to database server. Attempted reconnect 3 times. Giving up.
使用idea连接数据库的时候,报错为 [08001] Could not create connection to database server. Attempted reconnect 3 tim ...