[洛谷P1842] 奶牛玩杂技
有\(N\)头奶牛,每个奶牛有一个重量\(W[i]\),力量\(S[i]\)。定义每个奶牛的压扁程度为排在它前面的所有奶牛的总量之和减去当前奶牛的力量值。可以改变奶牛的排列顺序,问所有奶牛最大压扁程度可能的最小值
解题思路
没有思路……洛谷给它的难度是黄的,我还是太菜了吧……
其实这道题和国王游戏很像,但是我竟然一点都没联系起来。
假设目前已经确定了前\(i\)个奶牛分别是哪几个,那么影响第\(i\)头奶牛压扁程度的只与它前面是哪些奶牛有关,而与前面那些牛的排列顺序无关——设\(sumw=\sum\limits_{k=1}^{i}w[i]\),则当前奶牛的压扁程度为\(sumw-w[i]-s[i]\),也就是\(sumw-(w[i]+s[i])\)。
下面我们改变奶牛的排列顺序,我们发现当前\(i\)只奶牛确定时,显然第\(i\)只奶牛的\(w[i]+s[i]\)最大时当前奶牛的压扁程度最小。
于是我们得出结论,将所有奶牛按照\(w[i]+s[i]\)从小到大排序得到的结果一定是最优的。
反思
在贪心题中,确定一个,改变别的,这个思想非常重要。考虑影响当前这一步决策的因素到底有哪些,然后再深入分析解决。
Code
答案可能是负数。同时第一只奶牛也是有压扁程度的。
/*By DennyQi 2018*/
#include <cstdio>
#include <queue>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
#define int ll
const int MAXN = 10010;
const int MAXM = 20010;
const int INF = 21474837480000;
inline int Max(const int a, const int b){ return (a > b) ? a : b; }
inline int Min(const int a, const int b){ return (a < b) ? a : b; }
inline int read(){
int x = 0; int w = 1; register char c = getchar();
for(; c ^ '-' && (c < '0' || c > '9'); c = getchar());
if(c == '-') w = -1, c = getchar();
for(; c >= '0' && c <= '9'; c = getchar()) x = (x<<3) + (x<<1) + c - '0'; return x * w;
}
struct Cow{
int w,s;
}a[50010];
int N,Ans,s_w;
inline bool cmp(const Cow& a, const Cow& b){
return (a.w+a.s) < (b.w + b.s);
}
#undef int
int main(){
#define int ll
N = read();
for(int i = 1; i <= N; ++i){
a[i].w = read(), a[i].s = read();
}
sort(a+1, a+N+1, cmp);
s_w = a[1].w;
Ans = -a[1].s;
for(int i = 2; i <= N; ++i){
Ans = Max(Ans, s_w - a[i].s);
s_w += a[i].w;
}
printf("%lld", Ans);
return 0;
}
[洛谷P1842] 奶牛玩杂技的更多相关文章
- 洛谷 P1842 奶牛玩杂技 题解
P1842 奶牛玩杂技 题目背景 Farmer John 养了N(1<=N<=50,000)头牛,她们已经按1~N依次编上了号.FJ所不知道的是,他的所有牛都梦想着从农场逃走,去参加马戏团 ...
- p1842 奶牛玩杂技 题解
感觉其他dalao讲的不是很明白啊,我这样的蒟蒻看不懂啊. 在luogu这个dalao遍地的地方我蒟蒻看个题解也不明白,我为跟我同病相怜的蒟蒻写一篇吧 其实真是不太明白,大部分题解都是只说 体重大的在 ...
- 洛谷2344 奶牛抗议(DP+BIT+离散化)
洛谷2344 奶牛抗议 本题地址:http://www.luogu.org/problem/show?pid=2344 题目背景 Generic Cow Protests, 2011 Feb 题目描述 ...
- 洛谷P2402 奶牛隐藏
洛谷P2402 奶牛隐藏 题目背景 这本是一个非常简单的问题,然而奶牛们由于下雨已经非常混乱,无法完成这一计算,于是这个任务就交给了你.(奶牛混乱的原因看题目描述) 题目描述 在一个农场里有n块田地. ...
- 洛谷P2402 奶牛隐藏(网络流,二分答案,Floyd)
洛谷题目传送门 了解网络流和dinic算法请点这里(感谢SYCstudio) 题目 题目背景 这本是一个非常简单的问题,然而奶牛们由于下雨已经非常混乱,无法完成这一计算,于是这个任务就交给了你.(奶牛 ...
- [洛谷P2124] 奶牛美容
洛谷题目链接:奶牛美容 题目描述 输入输出格式 输入格式: 输出格式: 输入输出样例 输入样例#1: 6 16 ................ ..XXXX....XXX... ...XXXX... ...
- [WC2002][洛谷P1578]奶牛浴场
洛谷题解里那个人可真是话多呢. 题目描述 由于John建造了牛场围栏,激起了奶牛的愤怒,奶牛的产奶量急剧减少.为了讨好奶牛,John决定在牛场中建造一个大型浴场.但是John的奶牛有一个奇怪的习惯,每 ...
- 洛谷 P1578 奶牛浴场
https://www.luogu.org/problemnew/show/P1578 题解 另外这题有一些小坑,洛谷的题解里面有讲 #pragma GCC optimize("Ofast& ...
- [洛谷p2858] 奶牛零食
题目链接: 点我 题目分析: 这是什么,区间dp吗?怎么大佬都在说区间dp的样子 完蛋区间dp都不知道是啥quq 于是使用了玄学的姿势A过了这道题 设dp[i][j][0]表示第i天,左边选了j个,当 ...
随机推荐
- Saslauthd服务实现SMTP发信认证
一.SMTP发信认证 通过sasl库中的saslauthd服务实现SMTP认证 二.部署 1.先安装postifx 略 2.生成sasl配置文件,实现使用sasl认证 vim /usr/lib64/s ...
- 程序员50题(JS版本)(九)
程序41:八进制转换为十进制 var num1=425; var num2=0; num1=num1.toString(); for(var i=num1.length-1,root=1;i>= ...
- element表格切入按钮以及复选框
1,element表格切入按钮 关键代码: html:<el-table :data="tableList" border style="width: 100%&q ...
- Retrofit+MVP框架封装记录篇
当下最流行的网络请求组合,retrofit2+okhttp+rxjava+mvp 这里是封装记录篇 首先分模块,比如登录 先来说封装后的使用 package com.fragmentapp.login ...
- Spark Streaming 快速入门
一.简介 1.便于使用 Spark Streaming将Apache Spark的 语言集成API 引入流处理,使您可以像编写批处理作业一样编写流式作业.它支持Java,Scala和Python. 2 ...
- leecode.147. 对无头结点链表进行插入排序
void InsertSort(struct ListNode* L){ struct ListNode *p = L->next,*pre=NULL; struct ListNode *r = ...
- c# 创建excel表头及内容
主要通过ajax调用函数Getinfo 1.定义表dh DataTable dh = new DataTable(); 2.创建表头 public void CreateCol(string Colu ...
- emacs 只读打开文件
emacs 只读打开文件 : C-x C-r emacs 让buffer区变成只读 : C-x C-q emacs 让只读buffer区变成可以保存修改 : C-x C-q
- C#基础知识之IOC
依赖注入:http://www.cnblogs.com/leoo2sk/archive/2009/06/17/1504693.html IOC:https://jinnianshilongnian.i ...
- python从开始到放弃的途中一直很菜的day13
一直很菜的今天又来了两个新的概念,一个是装饰器,一个是推导式,装饰器好比女生出门前需要化妆的准备,推导式也称为生成式.先说装饰器吧,装饰器其实本质也是一个函数,并用@+函数名装饰到其他函数上,当这个其 ...