BZOJ 1629 [Usaco2005 Nov]Cow Acrobats:贪心【局部证明】
题目链接: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:贪心【局部证明】的更多相关文章
- bzoj 1629: [Usaco2007 Demo]Cow Acrobats【贪心+排序】
仿佛学到了贪心的新姿势-- 考虑相邻两头牛,交换它们对其他牛不产生影响,所以如果交换这两头牛能使这两头牛之间的最大值变小,则交换 #include<iostream> #include&l ...
- 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 ...
- [USACO2005][POJ3045]Cow Acrobats(贪心)
题目:http://poj.org/problem?id=3045 题意:每个牛都有一个wi和si,试将他们排序,每头牛的风险值等于前面所有牛的wj(j<i)之和-si,求风险值最大的牛的最小风 ...
- POJ 3045 Cow Acrobats (贪心)
POJ 3045 Cow Acrobats 这是个贪心的题目,和网上的很多题解略有不同,我的贪心是从最下层开始,每次找到能使该层的牛的风险最小的方案, 记录风险值,上移一层,继续贪心. 最后从遍历每一 ...
- BZOJ 1641: [Usaco2007 Nov]Cow Hurdles 奶牛跨栏( floyd )
直接floyd.. ---------------------------------------------------------------------------- #include<c ...
- Cow Acrobats(贪心)
Cow Acrobats Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 3686 Accepted: 1428 Desc ...
- BZOJ 1742: [Usaco2005 nov]Grazing on the Run 边跑边吃草( dp )
dp... dp( l , r , k ) , 表示 吃了[ l , r ] 的草 , k = 1 表示最后在 r 处 , k = 0 表示最后在 l 处 . ------------------- ...
- Bzoj 2058: [Usaco2010 Nov]Cow Photographs 题解
2058: [Usaco2010 Nov]Cow Photographs Time Limit: 3 Sec Memory Limit: 64 MBSubmit: 190 Solved: 104[ ...
- 【BZOJ】1629: [Usaco2007 Demo]Cow Acrobats(贪心+排序)
http://www.lydsy.com/JudgeOnline/problem.php?id=1629 这题我想了很久都没想出来啊... 其实任意两头相邻的牛交换顺序对其它牛是没有影响的.. 那么我 ...
随机推荐
- apue学习笔记(第七章 进程环境)
本章将了解进程的环境. main函数 C程序总是从main函数开始执行,main函数的原型是: int main(int argc,char *argv[]); 其中,argc是命令行参数的数目,ar ...
- 在Ubuntu 14.04 64bit中永久添加DNS的方法
DNS信息是由/etc/resolv.conf提供的,它是每次开机时,由/sbin/resolvconf生成的/etc/resolv.conf是/run/resolvconf/resolv.conf的 ...
- iOS多线程与网络开发之小文件上传
郝萌主倾心贡献,尊重作者的劳动成果,请勿转载. /** 取得本地文件的MIMEType */ 2 - (void) getMIMEType { 3 // Socket 实现断点上传 4 5 //apa ...
- Linux远程无密码登陆并远程执行脚本
假设 A (192.168.20.59)为客户机器,B(192.168.20.60)为目标机: 要达到的目的: A机器ssh登录B机器无需输入密码: 加密方式选 rsa|dsa均可以,默认dsa ss ...
- phpstorm 设置
phpstorm 设置多项目并存 phpstorm 或 webstorm 设置多个项目可以并存: File -> settings -> Directories -> Add Co ...
- GitHub使用问题(遇到一个记一个)
1.如何创建文件夹: 如图,Create new files,点击后,若需要创建文件,输入文件名即可,但如果创建的是文件夹,需要在文件夹名后 加一个 '/'斜杠,然后就变成文件夹了
- HTML5之Canvas绘图(一) ——基础篇
HTML5火的正热,最近有个想法也是要用到HTML的相关功能,所以也要好好学习一把. 好好看了一下Canvas的功能,感觉HTML5在客户端交互的功能性越来越强了,今天看了一下Canvas绘图,下边是 ...
- Spring里通过注解开启事物
方式1 <?xml version="1.0" encoding="UTF-8" ?> <beans xmlns="http://w ...
- 【SQLServer2008】之改变主键当为null时也不会报错,可以入数据库。
在SqlServer红框中设置主键,右键会有添加主键选项,并且设置不能为null. 当我们插入主键数据如果为null时,会插不进去,这时候我们需要修改一下,如下图: “标识规范”中选择“是”,就可以了 ...
- shader学习之一:Properties语义块支持的数据类型
_Int ("Int",Int)=2为:变量名("面板显示的名称",数据类型) 对于Int,Float,Range这些数字类型的属性,默认值为单独的数字.对于贴 ...