Cow Acrobats

Time Limit: 1000MS Memory Limit: 65536K

Total Submissions: 6253 Accepted: 2345

Description

Farmer John’s N (1 <= N <= 50,000) cows (numbered 1..N) are planning to run away and join the circus. Their hoofed feet prevent them from tightrope walking and swinging from the trapeze (and their last attempt at firing a cow out of a cannon met with a dismal failure). Thus, they have decided to practice performing acrobatic stunts.

The cows aren’t terribly creative and have only come up with one acrobatic stunt: standing on top of each other to form a vertical stack of some height. The cows are trying to figure out the order in which they should arrange themselves ithin this stack.

Each of the N cows has an associated weight (1 <= W_i <= 10,000) and strength (1 <= S_i <= 1,000,000,000). The risk of a cow collapsing is equal to the combined weight of all cows on top of her (not including her own weight, of course) minus her strength (so that a stronger cow has a lower risk). Your task is to determine an ordering of the cows that minimizes the greatest risk of collapse for any of the cows.

Input

  • Line 1: A single line with the integer N.

  • Lines 2..N+1: Line i+1 describes cow i with two space-separated integers, W_i and S_i.

Output

  • Line 1: A single integer, giving the largest risk of all the cows in any optimal ordering that minimizes the risk.

Sample Input

3

10 3

2 5

3 3

Sample Output

2

Hint

OUTPUT DETAILS:

Put the cow with weight 10 on the bottom. She will carry the other two cows, so the risk of her collapsing is 2+3-3=2. The other cows have lower risk of collapsing.


解题心得:

  1. 有n头牛,每一只牛有重量和力量,现在n只牛叠罗汉,每只牛的风险等于他头上牛的重量总和减去这只牛的力量。问怎么排列,使最大风险牛的风险最小。有两种想法。
  2. 挑战上面说这是一个二分题,其实就是一个贪心啊,先假设每一只牛都放在最下面,算出风险,然后将风险最小的那个放在下面,这样风险大的就可以减去已经安放了风险小的牛的重量,这样得到的风险就会逐步减小,最后风险最大的就是最小的。
  3. 也可以这样想,假设有两只牛a和b,a的重量为w1,力量为p1,b的重量为w2,力量为p2,如果将a放在下面,a的风险就是p1-w2,如果将b放在下面,风险就是p2-w1。如果a的风险比b的风险更小就会得到一个关系式:p1-w2
#include <stdio.h>
#include <algorithm>
#include <cstring>
using namespace std;
const int maxn =5e4+100;
struct COW{
int va,w;
long long press;
}cow[maxn];
int n; bool cmp(COW a,COW b) {
return a.press < b.press;
} void init() {
scanf("%d",&n);
long long sum = 0;
for(int i=0;i<n;i++) {
scanf("%d%d",&cow[i].w,&cow[i].va);
sum += cow[i].w;
}
for(int i=0;i<n;i++) {
cow[i].press = sum - cow[i].w - cow[i].va;
}
sort(cow,cow+n,cmp);
} long long get_oder() {
long long cut = 0;
long long ans = -10*(long long)0x7f7f7f7f;
for(int i=0;i<n;i++) {
cow[i].press = cow[i].press - cut;
ans = max(ans,cow[i].press);
cut += cow[i].w;
}
return ans;
} int main() {
init();
long long ans = get_oder();
printf("%lld\n",ans);
return 0;
}

第二种想法的代码:

#include <stdio.h>
#include <algorithm>
#include <cstring>
using namespace std;
const int maxn =5e4+100;
struct COW{
int va,w;
}cow[maxn];
int n; bool cmp(COW a,COW b) {
return a.va + a.w > b.va + b.w;
} void init() {
scanf("%d",&n);
for(int i=0;i<n;i++) {
scanf("%d%d",&cow[i].w,&cow[i].va);
}
sort(cow,cow+n,cmp);
} long long get_oder() {
long long sum = 0;
long long Max = -10*(long long)0x7f7f7f7f7f;
for(int i=n-1;i>=0;i--) {
long long temp = sum - cow[i].va;
sum += cow[i].w;
Max = max(Max,temp);
}
return Max;
} int main() {
init();
long long ans = get_oder();
printf("%lld\n",ans);
return 0;
}

POJ:3045-Cow Acrobats的更多相关文章

  1. POJ 3045 Cow Acrobats (贪心)

    POJ 3045 Cow Acrobats 这是个贪心的题目,和网上的很多题解略有不同,我的贪心是从最下层开始,每次找到能使该层的牛的风险最小的方案, 记录风险值,上移一层,继续贪心. 最后从遍历每一 ...

  2. poj 3045 Cow Acrobats(二分搜索?)

    Description Farmer John's N (1 <= N <= 50,000) cows (numbered 1..N) are planning to run away a ...

  3. POJ 3045 Cow Acrobats

    Description Farmer John's N (1 <= N <= 50,000) cows (numbered 1..N) are planning to run away a ...

  4. POJ 3045 Cow Acrobats (最大化最小值)

    题目链接:click here~~ [题目大意] 给你n头牛叠罗汉.每头都有自己的重量w和力量s,承受的风险数rank就是该牛上面全部牛的总重量减去该牛自身的力量,题目要求设计一个方案使得全部牛里面风 ...

  5. POJ - 3045 Cow Acrobats (二分,或者贪心)

    一开始是往二分上去想的,如果risk是x,题目要求则可以转化为一个不等式,Si + x >= sigma Wj ,j表示安排在i号牛上面的牛的编号. 如果考虑最下面的牛那么就可以写成 Si + ...

  6. POJ:3268-Silver Cow Party

    Silver Cow Party Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 26184 Accepted: 11963 De ...

  7. POJ3045 Cow Acrobats —— 思维证明

    题目链接:http://poj.org/problem?id=3045 Cow Acrobats Time Limit: 1000MS   Memory Limit: 65536K Total Sub ...

  8. poj3045 Cow Acrobats (思维,贪心)

    题目: poj3045 Cow Acrobats 解析: 贪心题,类似于国王游戏 考虑两个相邻的牛\(i\),\(j\) 设他们上面的牛的重量一共为\(sum\) 把\(i\)放在上面,危险值分别为\ ...

  9. 【POJ - 3045】Cow Acrobats (贪心)

    Cow Acrobats Descriptions 农夫的N只牛(1<=n<=50,000)决定练习特技表演. 特技表演如下:站在对方的头顶上,形成一个垂直的高度. 每头牛都有重量(1 & ...

随机推荐

  1. ajax提交 返回值为undefined

    easyui  form 表单提交成功,但是返回值为undefined,原因是返回值不是json格式,是字符串的格式,那么解决办法就是把其转化成json格式 示例: $(function () { / ...

  2. spoon kettle连接数据库失败解决方法

    Driver class 'oracle.jdbc.driver.OracleDriver' could not be found, make sure the 'Oracle' driver (ja ...

  3. [原创]Debian9 从零编译配置Redis4.0

    序言 Redis 一.准备工作 1.1 更新系统安装包列表 没啥,就他喵想用个最新的. # apt update 1.2 创建需要使用的目录 创建目录source和web,分别用来放源码和编译后的文件 ...

  4. April 25 2017 Week 17 Tuesday

    Have you ever known the theory of chocie? There are a bunch of axiems, but there are only two thing ...

  5. IBM带库加磁带操作

    1.查询要弹出磁带的信息 可查询media日志,冻结,可用等,详情可查 查看带库空闲槽位 vmcheckxxx -rt tld -rn 0(0为带库名) 磁带详细信息: bpmedialist -m ...

  6. CentOS6.5手动升级gcc4.8.2

    一.简易安装 操作环境 CentOS6.5 64bit,原版本4.4.7,不能支持C++11的特性~,希望升级到4.8.2 不能通过yum的方法升级,需要自己手动下载安装包并编译 本文记录了在Cent ...

  7. Docker中的三个基本概念容器(container)、镜像(image)和仓库(registry)之间有什么关系?

    Docker镜像是一个特殊的文件系统,除了提供容器运行时所需的程序.库.资源.配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷.环境变量.用户等).镜像不包含任何动态数据,其内容在构建之 ...

  8. IntelliJ IDEA / Eclipse 自动生成 Author 注释 签名

    Author 注释 签名如下: /*** @author 稚枭天卓 E-mail:zhxiaotianzhuo@163.com* @version 创建时间:2016-6-20 下午04:58:52* ...

  9. CUDA memory

    原文链接 CUDA存储器类型: 每个线程拥有自己的register and loacal memory; 每个线程块拥有一块shared memory; 所有线程都可以访问global memory; ...

  10. 第42章 电源管理—实现低功耗—零死角玩转STM32-F429系列

    第42章     电源管理—实现低功耗 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fir ...