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要初始化为负无穷
- /*
- * Created: 2016年04月01日 09时11分08秒 星期五
- * Author: Akrusher
- *
- */
- #include <cstdio>
- #include <cstdlib>
- #include <cstring>
- #include <cmath>
- #include <ctime>
- #include <iostream>
- #include <algorithm>
- #include <string>
- #include <vector>
- #include <deque>
- #include <list>
- #include <set>
- #include <map>
- #include <stack>
- #include <queue>
- #include <numeric>
- #include <iomanip>
- #include <bitset>
- #include <sstream>
- #include <fstream>
- using namespace std;
- #define rep(i,a,n) for (int i=a;i<n;i++)
- #define per(i,a,n) for (int i=n-1;i>=a;i--)
- #define in(n) scanf("%d",&(n))
- #define in2(x1,x2) scanf("%d%d",&(x1),&(x2))
- #define inll(n) scanf("%I64d",&(n))
- #define inll2(x1,x2) scanf("%I64d%I64d",&(x1),&(x2))
- #define inlld(n) scanf("%lld",&(n))
- #define inlld2(x1,x2) scanf("%lld%lld",&(x1),&(x2))
- #define inf(n) scanf("%f",&(n))
- #define inf2(x1,x2) scanf("%f%f",&(x1),&(x2))
- #define inlf(n) scanf("%lf",&(n))
- #define inlf2(x1,x2) scanf("%lf%lf",&(x1),&(x2))
- #define inc(str) scanf("%c",&(str))
- #define ins(str) scanf("%s",(str))
- #define out(x) printf("%d\n",(x))
- #define out2(x1,x2) printf("%d %d\n",(x1),(x2))
- #define outf(x) printf("%f\n",(x))
- #define outlf(x) printf("%lf\n",(x))
- #define outlf2(x1,x2) printf("%lf %lf\n",(x1),(x2));
- #define outll(x) printf("%I64d\n",(x))
- #define outlld(x) printf("%lld\n",(x))
- #define outc(str) printf("%c\n",(str))
- #define pb push_back
- #define mp make_pair
- #define fi first
- #define se second
- #define SZ(x) ((int)(x).size())
- #define mem(X,Y) memset(X,Y,sizeof(X));
- typedef vector<int> vec;
- typedef long long ll;
- typedef pair<int,int> P;
- const int dx[]={,,-,},dy[]={,,,-};
- const int INF=0x3f3f3f3f;
- const ll mod=1e9+;
- 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;}
- const bool AC=true;
- struct point{
- int a,b,c;//a为weight,b为strength
- };
- bool cmp(point x,point y){
- return x.c<y.c;
- }
- point p[];
- int main()
- {
- int n,sum,temp,minx;//minx为风险值
- in(n);
- sum=;
- rep(i,,n){
- in2(p[i].a,p[i].b);
- sum+=p[i].a;
- }
- rep(i,,n){
- p[i].c=sum-p[i].a-p[i].b;
- }
- sort(p,p+n,cmp);
- temp=;minx=-INF;//可能所有的值都为负值,此处必须初始化为负无穷
- rep(i,,n){
- minx=max(minx,p[i].c-temp);
- temp+=p[i].a;
- }
- out(minx);
- return ;
- }
POJ 3045 Cow Acrobats (贪心)的更多相关文章
- POJ - 3045 Cow Acrobats (二分,或者贪心)
一开始是往二分上去想的,如果risk是x,题目要求则可以转化为一个不等式,Si + x >= sigma Wj ,j表示安排在i号牛上面的牛的编号. 如果考虑最下面的牛那么就可以写成 Si + ...
- poj 3045 Cow Acrobats(二分搜索?)
Description Farmer John's N (1 <= N <= 50,000) cows (numbered 1..N) are planning to run away a ...
- POJ 3045 Cow Acrobats
Description Farmer John's N (1 <= N <= 50,000) cows (numbered 1..N) are planning to run away a ...
- POJ 3045 Cow Acrobats (最大化最小值)
题目链接:click here~~ [题目大意] 给你n头牛叠罗汉.每头都有自己的重量w和力量s,承受的风险数rank就是该牛上面全部牛的总重量减去该牛自身的力量,题目要求设计一个方案使得全部牛里面风 ...
- Cow Acrobats(贪心)
Cow Acrobats Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 3686 Accepted: 1428 Desc ...
- [USACO2005][POJ3045]Cow Acrobats(贪心)
题目:http://poj.org/problem?id=3045 题意:每个牛都有一个wi和si,试将他们排序,每头牛的风险值等于前面所有牛的wj(j<i)之和-si,求风险值最大的牛的最小风 ...
- poj 3045 叠罗汉问题 贪心算法
题意:将n头牛叠起来,每头牛的力气 s体重 w 倒下的风险是身上的牛的体重的和减去s 求最稳的罗汉倒下去风险的最大值 思路: 将s+w最大的放在下面,从上往下看 解决问题的代码: #include& ...
- POJ3045 Cow Acrobats —— 思维证明
题目链接:http://poj.org/problem?id=3045 Cow Acrobats Time Limit: 1000MS Memory Limit: 65536K Total Sub ...
- 【POJ - 3045】Cow Acrobats (贪心)
Cow Acrobats Descriptions 农夫的N只牛(1<=n<=50,000)决定练习特技表演. 特技表演如下:站在对方的头顶上,形成一个垂直的高度. 每头牛都有重量(1 & ...
随机推荐
- Spring碎点知识
1.依赖注入:不仅可以为Bean注入普通的属性值,还可以注入其他Bean的作用.通过配置文件组织在一起,这里的Bean是Java对象 说明:关于依赖注入与控制反转的这两个名字,表达的都是同一个意思,只 ...
- 文本阴影:text-shadow
例如: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8 ...
- ANTLR
http://dreamhead.blogbus.com/logs/10756716.html
- C 語言中的編譯指示 (Pragma)
編譯指示 #pragma 是用來告知編譯器某些特殊指示,例如不要輸出錯誤訊息,抑制警告訊息,或者加上記憶體漏洞檢查機制等.這些指示通常不是標準的 C 語言所具備的,而是各家編譯器廠商或開發者所制定的, ...
- 一个简单的以User权限启动外部应用程序
BOOL ExecuteAsUser(LPCWSTR lpszUserName, LPCWSTR lpszPassword, LPCWSTR lpszApplication, LPCWSTR lpsz ...
- windows 自动安装
msiexec
- Java虚拟机内存优化实践
前面一篇文章介绍了Java虚拟机的体系结构和内存模型,既然提到内存,就不得不说到内存泄露.众所周知,Java是从C++的基础上发展而来的,而C++程序的很大的一个问题就是内存泄露难以解决,尽管Java ...
- mysql-创建函数,存储过程以及视图
1.创建函数 mysql>delimiter // mysql>create function 函数名(参数1 参数1类型,...) returns 返回类型 >be ...
- hadoop2.2.0的ha分布式集群搭建
hadoop2.2.0 ha集群搭建 使用的文件如下: jdk-6u45-linux-x64.bin hadoop-2.2.0.x86_64.tar zookeeper-3.4.5. ...
- 微软在线测试题String reorder
问题描述: Time Limit: 10000msCase Time Limit: 1000msMemory Limit: 256MB DescriptionFor this question, yo ...