题目链接: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. 2018.9.21 Codeforces Round #511(Div.2)

    只写了AB,甚至还WA了一次A题,暴露了蒟蒻的本质=.= 感觉考的时候有好多正确或和正解有关的思路,但是就想不出具体的解法或者想的不够深(长)(怕不是过于鶸) 话说CF的E题怎么都这么清奇=.= A. ...

  2. C#线程篇---让你知道什么是线程(1)

    线程线程,进程进程,到底什么是线程,什么是熟练多线程编程? 今天来和大家一起讨论讨论线程基础,让大家知道线程的基本构造. 说线程之前,先要了解下进程,这个可不能不知道. 什么是进程? Microsof ...

  3. 安装ucenter discuzX

    需要先安装ucenter再安装discuzX!! ucenter下载,官网上不大好下载: http://www.comsenz.com/downloads/install/ucenter 下载不了; ...

  4. Linux运维一:生产环境CentOS6.6系统的安装

    CentOS 6.6 x86_64官方正式版系统(64位)下载地址 系统之家:http://www.xitongzhijia.net/linux/201412/33603.html 百度网盘:http ...

  5. day19 IO编程

    文件:文件是数据源(保存数据的地方)的一种. 文件在程序中是以流的形式来操作的 内存(程序)到文件是输出流,文件到内存(程序)是输入流. 字节流:可用于读写的二进制文件及任何类型文件. 字符流:可以用 ...

  6. vue 项目代码初始化

    1. <meta>补充 <head> <meta charset="utf-8"> <meta name="viewport&q ...

  7. 51 nod 1205 流水线调度

    51 nod 1205 流水线调度 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题   N个作业{1,2,…,n}要在由2台机器M1和M2组成的流水线上完成加工.每 ...

  8. ZeroMQ API(一) 总序

    序 zeromq是一个轻量级的消息库.它扩展了标准的套接字接口,其特性与传统的消息中间件不同,zeromq提供异步消息队列.多消息传递模式.消息过滤(订阅).无缝访问多个传输协议等的抽象. 本系列AP ...

  9. Linux命令练习.ziw

    2017年1月10日, 星期二 Linux命令练习 1.统计/usr/bin/目录下的文件个数: # ls /usr/bin | wc -l 判断 /home/goldin目录是否有文件 2.取出当前 ...

  10. swiper隐藏再显示出现点击不了情况

    //初始化swiper var swiper = new Swiper('.swiper-container', { pagination: '.swiper-pagination', nextBut ...