题目链接:http://codeforces.com/problemset/problem/777/E

题意:有n个环给你内环半径、外环半径和高度,叠这些环还要满足以下要求:

    ①:下面的环的外径要>=上面的环

    ②:环不能掉下去,所以下面的环的内径要<上面的环的外径

    ③:叠出最大高度

思路:贪心思想,先把这些环按外径从大到小,内径从大到小排好序,内径从大到小是为了尽可能让后面的环能放上去。接下来就可以用栈模拟了,放1~n个环的时每次都要判断,如果当前最顶上的环的内径大于我要放的环的内径也就是放不上去,那就把顶上的环出栈,一直循环直到能放上去为止,再把当前环入栈。然后每次都比较一下高度和,得出最大高度。为什么可以用栈写?因为我们已经知道前面的环叠不上后面的环肯定也叠不上,因为后面的环外径肯定<=前面的环,那把栈当成已经建好的塔,如果环放不上去,为了后面可以继续放,那可以拆了一部分重建。

  这是开始没用栈的无脑代码从头到尾遍历了一遍,直接超时,心塞- -、、:

  

#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
const int N=1e5+;
typedef long long ll;
struct node{
int in;
int out;
int h;
}a[N];
ll dp[N]; bool cmp(node a,node b){
return a.out==b.out?a.in>b.in:a.out>b.out;
} int main(){
ll n,ans=;
cin>>n;
for(int i=;i<=n;i++){
cin>>a[i].in>>a[i].out>>a[i].h;
if(a[i].h>ans)
ans=a[i].h;
}
sort(a+,a++n,cmp);
// cout<<endl;
// for(int i=1;i<=n;i++){
// cout<<a[i].in<<" "<<a[i].out<<" "<<a[i].h<<endl;
// }
for(int i=;i<=n;i++){
dp[i]=a[i].h;
for(int j=;j<i;j++){
if(a[i].out>=a[j].in)
dp[i]=max(dp[i],dp[j]+a[i].h);
}
ans=max(ans,dp[i]);
}
cout<<ans<<endl;
}

这是用栈写的:

#include<iostream>
#include<algorithm>
#include<stack>
using namespace std;
const int N=1e5+;
typedef long long ll;
struct node{
int in;
int out;
int h;
}a[N];
ll dp[N]; bool cmp(node a,node b){
return a.out==b.out?a.in>b.in:a.out>b.out;
}
int main(){
ll n;
stack<node>s;
cin>>n;
for(int i=;i<=n;i++){
cin>>a[i].in>>a[i].out>>a[i].h;
}
sort(a+,a++n,cmp);
// cout<<endl;
// for(int i=1;i<=n;i++){
// cout<<a[i].in<<" "<<a[i].out<<" "<<a[i].h<<endl;
// }
ll sum=,ans=;
for(int i=;i<=n;i++){
while(!s.empty()&&a[i].out<=s.top().in){//判断是否能叠上去,不能的话就把最顶上的环拿下来
sum-=s.top().h;
s.pop();
}
sum+=a[i].h;
s.push(a[i]);
ans=max(ans,sum); //比较最大高度
}
cout<<ans<<endl;
}

Codeforces 777E - Hanoi Factory(贪心+栈)的更多相关文章

  1. Codeforces 777E Hanoi Factory(线段树维护DP)

    题目链接 Hanoi Factory 很容易想到这是一个DAG模型,那么状态转移方程就出来了. 但是排序的时候有个小细节:b相同时看a的值. 因为按照惯例,堆塔的时候肯定是内半径大的在下面. 因为N有 ...

  2. codeforces-777E Hanoi Factory (栈+贪心)

    题目传送门 题目大意: 现在一共有N个零件,如果存在:bi>=bj&&bj>ai的两个零件i,j,那么此时我们就可以将零件j放在零件i上.我们现在要组成一个大零件,使得高度 ...

  3. Codeforces 777E:Hanoi Factory(贪心)

    Of course you have heard the famous task about Hanoi Towers, but did you know that there is a specia ...

  4. Codeforces777E. Hanoi Factory 2017-05-04 18:10 42人阅读 评论(0) 收藏

    E. Hanoi Factory time limit per test 1 second memory limit per test 256 megabytes input standard inp ...

  5. codeforces 704B - Ant Man 贪心

    codeforces 704B - Ant Man 贪心 题意:n个点,每个点有5个值,每次从一个点跳到另一个点,向左跳:abs(b.x-a.x)+a.ll+b.rr 向右跳:abs(b.x-a.x) ...

  6. CodeForces - 50A Domino piling (贪心+递归)

    CodeForces - 50A Domino piling (贪心+递归) 题意分析 奇数*偶数=偶数,如果两个都为奇数,最小的奇数-1递归求解,知道两个数都为1,返回0. 代码 #include ...

  7. Codeforces 777E(离散化+dp+树状数组或线段树维护最大值)

    E. Hanoi Factory time limit per test 1 second memory limit per test 256 megabytes input standard inp ...

  8. Codeforces 777E:Hanoi Factory(贪心+栈)

    http://codeforces.com/problemset/problem/777/E 题意:给出n个环状圆柱,每个圆环有一个内半径a,外半径b,和高度h,只有外半径bj <= bi并且b ...

  9. CF #401 (Div. 2) E. Hanoi Factory (栈+贪心)

    题意:给你一堆汉诺塔的盘子,设内半径为a,设外半径为b,高度为h,如果bj ≤ bi 同时bj > ai 我们就认为i盘子能落在在j盘子上,问你最高能落多高 思路:一看题意我们就能想到贪心,首先 ...

随机推荐

  1. ab输出信息解释以及Failed requests原因分析

    ab是apache自带的压力测试工具.ab进行的一切测试本质上是基于HTTP的.下面是对ab输出项信息的解释和出现Failed requests原因分析.测试实例:1. ab输出信息说明:   1 2 ...

  2. SSH连接与自动化部署工具paramiko与Fabric

    paramiko paramiko是基于Python实现的SSH2远程安全连接,支持认证及密钥方法.可以实现远程命令执行,文件传输,中间SSH代理等功能,相对于Pexpect,封装层次更高. pip ...

  3. 我的编码习惯 - Controller规范

    原文出处: 晓风轻 请先阅读我这2篇文章 程序员你为什么这么累? 和 我的编码习惯 - 接口定义. 第一篇文章中,我贴了2段代码,第一个是原生态的,第2段是我指定了接口定义规范,使用AOP技术之后最终 ...

  4. Spark记录-Scala基础语法

    如果您熟悉Java语言语法和编程,那么学习Scala将会很容易.Scala和Java之间最大的句法差异在于行结束字符的分号(;) 是可选的. 当编写Scala程序时,它可以被定义为通过调用彼此的方法进 ...

  5. Redis学习二:Redis入门介绍

    一.入门概述 1.是什么 Redis:REmote DIctionary Server(远程字典服务器) 是完全开源免费的,用C语言编写的,遵守BSD协议,是一个高性能的(key/value)分布式内 ...

  6. JS代码判断浏览器版本,支持IE6,IE7,IE8,IE9!三种方法!

    web开发的时候有时候会用到JS检测IE的版本,下面是检测Microsoft Internet Explorer版本的三种代码! 方法一: <script type="text/jav ...

  7. 【专题】平衡树(Treap,fhq-treap)

    [旋转] 平衡树中的旋转是指在不改变中序遍历的前提下改变树的形态的方式.(中序遍历=排名顺序) 右旋将当前点的左节点旋上来,左旋反之.(图侵删) void rturn(int &k){ int ...

  8. 如何使用Defender优雅的管理权限?

    何为权限管理 权限管理已经不知不觉深入到了我们生活的每一个角落,例如地铁进站的闸机,高速公路上的过路费,停车场的杠杆等等等等. 作为一名开发人员,权限二字对我们的映像更加深刻,无论任何系统,都多多少少 ...

  9. opencv的基本数据结构(二)(转)

    转自:原文链接,以下代码.图片.内容有点改动,只为转载不降低博客内容的可阅性,版权归原作者所有. OpenCV中强大的Mat类型大家已经比较熟悉了.这里梳理一些在工程中其他经常用到的几种基本数据类型. ...

  10. css3 加载动画效果

    Loading 动画效果一           HTML 代码: <div class="spinner"> <div class="rect1&quo ...