题目链接:http://begin.lydsy.com/JudgeOnline/problem.php?id=1332

题意:

  有n头牛在“叠罗汉”。

  第i头牛的体重为w[i],力量为s[i]。

  一头牛的压扁程度 = 它上面所有牛的体重之和 - s[i]

  所有牛的总压扁程度 = 所有牛中最大的那个压扁程度

  问你总压扁程度最小为多少。

题解:

  贪心。

  套路:

    选取最小的一个单元——相邻的两头牛,进行贪心策略的局部证明。

  贪心策略:

    假设最左边为顶部,最右边为底部。

    从左往右分别编号0...n-1。

    考虑两头相邻的牛:交换i和i+1两头牛。

    压扁程度(交换之前):

      i: a = sum - s[i]

      i+1: b = sum + w[i] - s[i+1]

    压扁程度(交换之后):

      i: a' = sum + w[i+1] - s[i]

      i+1: b' = sum - s[i+1]

    显然:在交换之前,b为两者最大值;交换之后,a'为两者最大值。

    假设未交换时为最优状态,则交换后不可能更优。

    所以有:b < a'

    即:sum + w[i] - s[i+1] < sum + w[i+1] - s[i]

    整理得:s[i+1] + w[i+1] > s[i] + w[i]

    所以贪心策略为:w+s值越大,越放在底下。

AC Code:

 // before:
// i: sum - s[i]
// i+1: sum + w[i] - s[i+1]
// after:
// i+1: sum - s[i+1]
// i: sum + w[i+1] - s[i]
//
// f1 < f4 +w[i+1]
// f2 > f3 -w[i]
// w[i] - s[i+1] < w[i+1] - s[i]
// w[i+1] + s[i+1] > w[i] + s[i]
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
#define MAX_N 50005
#define INF 10000000 using namespace std; struct Cow
{
int w;
int s;
Cow(int _w,int _s)
{
w=_w;
s=_s;
}
Cow(){}
friend bool operator < (const Cow &a,const Cow &b)
{
return a.w+a.s<b.w+b.s;
}
}; int n;
Cow cow[MAX_N]; int main()
{
cin>>n;
for(int i=;i<n;i++)
{
cin>>cow[i].w>>cow[i].s;
}
sort(cow,cow+n);
int sum=;
int ans=-INF;
for(int i=;i<n;i++)
{
ans=max(ans,sum-cow[i].s);
sum+=cow[i].w;
}
cout<<ans<<endl;
}

BZOJ 1629 [Usaco2005 Nov]Cow Acrobats:贪心【局部证明】的更多相关文章

  1. bzoj 1629: [Usaco2007 Demo]Cow Acrobats【贪心+排序】

    仿佛学到了贪心的新姿势-- 考虑相邻两头牛,交换它们对其他牛不产生影响,所以如果交换这两头牛能使这两头牛之间的最大值变小,则交换 #include<iostream> #include&l ...

  2. BZOJ 1629: [Usaco2007 Demo]Cow Acrobats

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

  3. [USACO2005][POJ3045]Cow Acrobats(贪心)

    题目:http://poj.org/problem?id=3045 题意:每个牛都有一个wi和si,试将他们排序,每头牛的风险值等于前面所有牛的wj(j<i)之和-si,求风险值最大的牛的最小风 ...

  4. POJ 3045 Cow Acrobats (贪心)

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

  5. BZOJ 1641: [Usaco2007 Nov]Cow Hurdles 奶牛跨栏( floyd )

    直接floyd.. ---------------------------------------------------------------------------- #include<c ...

  6. Cow Acrobats(贪心)

    Cow Acrobats Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 3686   Accepted: 1428 Desc ...

  7. BZOJ 1742: [Usaco2005 nov]Grazing on the Run 边跑边吃草( dp )

    dp... dp( l , r , k )  , 表示 吃了[ l , r ] 的草 , k = 1 表示最后在 r 处 , k = 0 表示最后在 l 处 . ------------------- ...

  8. Bzoj 2058: [Usaco2010 Nov]Cow Photographs 题解

    2058: [Usaco2010 Nov]Cow Photographs Time Limit: 3 Sec  Memory Limit: 64 MBSubmit: 190  Solved: 104[ ...

  9. 【BZOJ】1629: [Usaco2007 Demo]Cow Acrobats(贪心+排序)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1629 这题我想了很久都没想出来啊... 其实任意两头相邻的牛交换顺序对其它牛是没有影响的.. 那么我 ...

随机推荐

  1. AutoCAD 样条曲线如何结束

    如下所示,走了四个点之后曲线绘制结束想要闭合了   鼠标右击选择确认   然后变成下面这个样子,鼠标再右击就可以结束(然后又回从下面伸出来东西,还是右击)总之就是想要结束的时候:右击确认,不断右击   ...

  2. poj 3307 Smart Sister 打表解因子生成数问题

    题意: 给i,求由仅以2,3,5,7为因子的数中第i个是多少. 分析: 打表. 代码: //poj 3307 //sep9 #include <iostream> using namesp ...

  3. IIS配置asp.net网站

    http://wenku.baidu.com/view/f8ce6c14767f5acfa0c7cd36.html

  4. 一种把dll放在不同目录的巧妙方法

    想必C#的开发者都遇到过这个问题,引用的dll都放在根目录下,随着项目的日益增大,根目录下充满了各种各样的dll,非常的不美观. 如果能够把dll按照想要的目录来存放,那么系统就美观多了,以下是我常用 ...

  5. python 中给文件加锁——fcntl模块

    如果没有fcntl模块则用 sudo pip install fcntl安装 模块简单说明: 打开文件,不存在则创建之 f = open('./test','w') fcntl.flock(f,fcn ...

  6. 配置fio支持rbd測试引擎

    fio的rbd測试引擎能够非常方便的对rbd进行測试.以下示范怎样安装fio支持rbd引擎. git clone git://git.kernel.dk/fio.git $ cd fio $ ./co ...

  7. 关于C++项目指针对象未被初始化的问题(0xcdcdcd)

    http://blog.csdn.net/devfun/article/details/6900086 昨天我试图将一个封装好的模块加入到正在开发的项目中,这个模块不是单独的类,而且对应的声明和实例. ...

  8. JS 的引用赋值与传值赋值

    这个问题说大不大说小不小,如果你有幸踩了这个坑,一定会找这篇文章,哈哈~ 现说一下JS数字的类型:基本类型和引用类型 先看下下面两个栗子: var a = 30; var b = a; a = 20; ...

  9. VS中单元测试用法

    using System; using Microsoft.VisualStudio.TestTools.UnitTesting; namespace UnitTestProject1 { [Test ...

  10. 移动app性能测试(待完善)

    移动终端性能测试是测试手机终端是否符合特定性能指标的测试,包括有:内存.CPU.电量.流量.流畅度.时延等 测试准备:测试账号.测试需求.测试用例.待测手机.待测应用包.测试工具.测试电脑 1.  时 ...