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

题目:http://poj.org/problem?id=3045

题意:每个牛都有一个wi和si,试将他们排序,每头牛的风险值等于前面所有牛的wj(j<i)之和-si,求风险值最大的牛的最小风险值

分析:这就是noip2012 T2的来源= =只不过这里是加,noip里是乘

不妨设所有牛都按最优顺序排好了,考虑相邻的两头牛i和i+1,如果交换他们的位置,那么对前面和后面的结果都无影响,只是他们两个的风险值变化了(变大了),于是我们可以得到这个时候i和i+1的关系

设w1+w2+...+wi-1=W

那么如果i和i+1不交换:

i的风险值:W-si              ①

i+1的风险值:W+wi-si+1               ②

如果i和i+1交换:

i+1(现在在第i个位置)的风险值:W-si+1        ③

i(现在在第i+1个位置)的风险值:W+wi+1-si       ④

很容易可以看出②>③,④>①,而又假设原顺序是最优的,那么后来交换后肯定不是最优的,即②<④,即wi+si<wi+1+si+1,即最优序列一定满足wi+si<wi+1+si+1

所以算法很简单,按wi+si排序即可

总结:看见求最大的最小不能定式思维二分,当二分不行时可以观察题目的特点,抓住特点很重要

[USACO2005][POJ3045]Cow Acrobats(贪心),码迷,mamicode.com

时间: 2024-08-04 22:24:56

[USACO2005][POJ3045]Cow Acrobats(贪心)的相关文章

POJ3045 Cow Acrobats(贪心)

传送门 大意:有N头牛叠罗汉,对于每头牛定义一个难受值D,D等于在它上面的所有奶牛的体重减去它的力量. 拿到这道题,感觉无从下手啊,贪力量,可是体重就不能保证上面的最好了.正解其实是要贪每头牛的力量加上体重,和大的放在下面. 证明: 设Di表示第i头奶牛的难受值,Wi表示第i头奶牛的体重,Si表示第i头奶牛的力量,令i,j相邻,且Wi+Si>Wj+Sj,设∑表示i和j上面的奶牛的重量之和 当i在j的上方时有 - Di=∑?Si ① - Dj=∑+Wi?Sj ② 当j在i的上方时有 - Di=∑+

POJ3045 Cow Acrobats —— 思维证明

题目链接:http://poj.org/problem?id=3045 Cow Acrobats Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5713   Accepted: 2151 Description Farmer John's N (1 <= N <= 50,000) cows (numbered 1..N) are planning to run away and join the circus. The

Cow Acrobats(贪心)

Cow Acrobats Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 3686   Accepted: 1428 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 tig

POJ - 3045 Cow Acrobats 贪心

题目大意:有N头牛要叠罗汉,每头牛都有相应的重量和力量. 叠罗汉是有危险的,每头牛的危险系数为该牛上面的牛的重量的和减去该牛的力量 问如何安排这个叠罗汉顺序,使得危险系数最大的那头牛的危险系数最小 解题思路:最大值的最小值,用二分?二分当然也可以,但是有更简便的方法 假设第i头牛的重量为wi,力量为si,第j头牛的重量为wj,力量为sj,第i头牛上面的牛的重量和sum 先考虑第一种情况,第i头牛叠到第j头牛的上面 那么 a1 = sum -si, b1 = sum + wi -sj 考虑第二种情

bzoj1629[Usaco2007 Demo]Cow Acrobats*

bzoj1629[Usaco2007 Demo]Cow Acrobats 题意: n头牛,每天牛都有体重与力量值.它们玩叠罗汉的游戏,每个牛的危险值等于它上面的牛的体重总和减去它的力量值,求所有方案中危险值最大的最小. 题解: 贪心.第i头牛比第j头牛高当且仅当i的重量-j的力量<j的重量-i的力量. 代码: 1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 #define maxn

【BZOJ 1629】 [Usaco2007 Demo]Cow Acrobats

1629: [Usaco2007 Demo]Cow Acrobats Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 657  Solved: 331 [Submit][Status] 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 p

1629: [Usaco2007 Demo]Cow Acrobats

1629: [Usaco2007 Demo]Cow Acrobats Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 1023  Solved: 531[Submit][Status][Discuss] Description Farmer John's N (1 <= N <= 50,000) cows (numbered 1..N) are planning to run away and join the circus. Their hoofe

POJ3617 Best Cow Line 贪心

这题虽然简单但是挺不错的,因为过程很好,比较开发思维 和鼓励人,不像有些贪心太偏不好推反而让人厌烦 给出长度为N的字符串S,然后还有一个空串STR,每次有两个选择 1:删除S的头元素假加入STR中      2:删除S的尾元素加入STR中 是的STR字典序最小 并输出 开始可能没有什么顾虑的去想 每次比较S的头和尾元素 取小的那个删除并假如STR中,但是若S的头和尾元素一样的话这个方法就不行了,因为先取头或者尾还得看他们之间的元素,这时候是倒着来还是顺着好呢?那就直接拿顺的跟倒的进行字典序的大小

[USACO2005][POJ3044]City Skyline(贪心+单调栈)

题目:http://poj.org/problem?id=3044 题意:以坐标的形式给出一张图,表示一些楼房的正视图,求出楼房的最少个数. 分析:和小学常做的立方体问题很像,很容易想到一个贪心方法,那就是尽量把矮的楼房放在高的楼房的前面,即连续的等高的一些"X"我们把它视为一座楼房. 具体的做法可以维护一个Y坐标单增的栈,从左到右读入每个坐标,将Y坐标与栈顶坐标比较: 若Y==栈顶坐标,那么接着读下面一个坐标 若Y>栈顶坐标,那么把Y坐标加入栈成为新的栈顶 若Y<栈顶坐标