POJ 3045 Cow Acrobats

   这是个贪心的题目,和网上的很多题解略有不同,我的贪心是从最下层开始,每次找到能使该层的牛的风险最小的方案,

  记录风险值,上移一层,继续贪心.

  最后从遍历每一层的风险值,找到其中的最大值

   我一开始对sum-p[i].a-p[i].b从小到大排序,这样第一次取出的就是能使最下层的牛的风险最小的方案,在上移一层时,这一层的风险值

    为sum-p[i].a-p[i].b-p[0].a,由于p[0].a是固定值,所以第二次直接取出的就是能使该层的牛的风险最小的方案,依次类推..

   网上好多题解都是直接对p[i].a+p[i].b从大到小排序,其实本质上和我这个贪心是一样的,不过思考贪心的方式略有不同.

   此题有个坑点:可能一开始所有的风险值都为负的,我的minx初始化0就wa了好几次.minx要初始化为负无穷

    

  1. /*
  2. * Created: 2016年04月01日 09时11分08秒 星期五
  3. * Author: Akrusher
  4. *
  5. */
  6. #include <cstdio>
  7. #include <cstdlib>
  8. #include <cstring>
  9. #include <cmath>
  10. #include <ctime>
  11. #include <iostream>
  12. #include <algorithm>
  13. #include <string>
  14. #include <vector>
  15. #include <deque>
  16. #include <list>
  17. #include <set>
  18. #include <map>
  19. #include <stack>
  20. #include <queue>
  21. #include <numeric>
  22. #include <iomanip>
  23. #include <bitset>
  24. #include <sstream>
  25. #include <fstream>
  26. using namespace std;
  27. #define rep(i,a,n) for (int i=a;i<n;i++)
  28. #define per(i,a,n) for (int i=n-1;i>=a;i--)
  29. #define in(n) scanf("%d",&(n))
  30. #define in2(x1,x2) scanf("%d%d",&(x1),&(x2))
  31. #define inll(n) scanf("%I64d",&(n))
  32. #define inll2(x1,x2) scanf("%I64d%I64d",&(x1),&(x2))
  33. #define inlld(n) scanf("%lld",&(n))
  34. #define inlld2(x1,x2) scanf("%lld%lld",&(x1),&(x2))
  35. #define inf(n) scanf("%f",&(n))
  36. #define inf2(x1,x2) scanf("%f%f",&(x1),&(x2))
  37. #define inlf(n) scanf("%lf",&(n))
  38. #define inlf2(x1,x2) scanf("%lf%lf",&(x1),&(x2))
  39. #define inc(str) scanf("%c",&(str))
  40. #define ins(str) scanf("%s",(str))
  41. #define out(x) printf("%d\n",(x))
  42. #define out2(x1,x2) printf("%d %d\n",(x1),(x2))
  43. #define outf(x) printf("%f\n",(x))
  44. #define outlf(x) printf("%lf\n",(x))
  45. #define outlf2(x1,x2) printf("%lf %lf\n",(x1),(x2));
  46. #define outll(x) printf("%I64d\n",(x))
  47. #define outlld(x) printf("%lld\n",(x))
  48. #define outc(str) printf("%c\n",(str))
  49. #define pb push_back
  50. #define mp make_pair
  51. #define fi first
  52. #define se second
  53. #define SZ(x) ((int)(x).size())
  54. #define mem(X,Y) memset(X,Y,sizeof(X));
  55. typedef vector<int> vec;
  56. typedef long long ll;
  57. typedef pair<int,int> P;
  58. const int dx[]={,,-,},dy[]={,,,-};
  59. const int INF=0x3f3f3f3f;
  60. const ll mod=1e9+;
  61. ll powmod(ll a,ll b) {ll res=;a%=mod;for(;b;b>>=){if(b&)res=res*a%mod;a=a*a%mod;}return res;}
  62. const bool AC=true;
  63.  
  64. struct point{
  65. int a,b,c;//a为weight,b为strength
  66. };
  67. bool cmp(point x,point y){
  68. return x.c<y.c;
  69. }
  70. point p[];
  71. int main()
  72. {
  73. int n,sum,temp,minx;//minx为风险值
  74. in(n);
  75. sum=;
  76. rep(i,,n){
  77. in2(p[i].a,p[i].b);
  78. sum+=p[i].a;
  79. }
  80. rep(i,,n){
  81. p[i].c=sum-p[i].a-p[i].b;
  82. }
  83. sort(p,p+n,cmp);
  84. temp=;minx=-INF;//可能所有的值都为负值,此处必须初始化为负无穷
  85. rep(i,,n){
  86. minx=max(minx,p[i].c-temp);
  87. temp+=p[i].a;
  88. }
  89. out(minx);
  90. return ;
  91. }

POJ 3045 Cow Acrobats (贪心)的更多相关文章

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

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

  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. Cow Acrobats(贪心)

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

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

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

  7. poj 3045 叠罗汉问题 贪心算法

    题意:将n头牛叠起来,每头牛的力气 s体重 w  倒下的风险是身上的牛的体重的和减去s 求最稳的罗汉倒下去风险的最大值 思路: 将s+w最大的放在下面,从上往下看 解决问题的代码: #include& ...

  8. POJ3045 Cow Acrobats —— 思维证明

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

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

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

随机推荐

  1. Spring碎点知识

    1.依赖注入:不仅可以为Bean注入普通的属性值,还可以注入其他Bean的作用.通过配置文件组织在一起,这里的Bean是Java对象 说明:关于依赖注入与控制反转的这两个名字,表达的都是同一个意思,只 ...

  2. 文本阴影:text-shadow

    例如: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8 ...

  3. ANTLR

    http://dreamhead.blogbus.com/logs/10756716.html

  4. C 語言中的編譯指示 (Pragma)

    編譯指示 #pragma 是用來告知編譯器某些特殊指示,例如不要輸出錯誤訊息,抑制警告訊息,或者加上記憶體漏洞檢查機制等.這些指示通常不是標準的 C 語言所具備的,而是各家編譯器廠商或開發者所制定的, ...

  5. 一个简单的以User权限启动外部应用程序

    BOOL ExecuteAsUser(LPCWSTR lpszUserName, LPCWSTR lpszPassword, LPCWSTR lpszApplication, LPCWSTR lpsz ...

  6. windows 自动安装

    msiexec

  7. Java虚拟机内存优化实践

    前面一篇文章介绍了Java虚拟机的体系结构和内存模型,既然提到内存,就不得不说到内存泄露.众所周知,Java是从C++的基础上发展而来的,而C++程序的很大的一个问题就是内存泄露难以解决,尽管Java ...

  8. mysql-创建函数,存储过程以及视图

    1.创建函数  mysql>delimiter //  mysql>create function 函数名(参数1 参数1类型,...) returns 返回类型       >be ...

  9. hadoop2.2.0的ha分布式集群搭建

    hadoop2.2.0 ha集群搭建 使用的文件如下:    jdk-6u45-linux-x64.bin    hadoop-2.2.0.x86_64.tar    zookeeper-3.4.5. ...

  10. 微软在线测试题String reorder

    问题描述: Time Limit: 10000msCase Time Limit: 1000msMemory Limit: 256MB DescriptionFor this question, yo ...