DP单调栈优化

看到这道题可以很自然的想到DP

设$dp[i]$表示最后一个$ring$为$i$的最大高度

首先将$b$为第一关键字,$a$为第二关键字,升序排序元素

那么对于$i$来说,它下面的$ring$的所有能转移过来的$j$,要满足$j<i$,且$b[i]>a[j]$

所以dp转移方程为$dp[i]=max{dp[j]}+h[i](j<i,b[i]>a[j])$

但这个转移时$O(n^{2})$的

那么需要找出满足条件的最大$dp$值

发现对于$i<j<k$,且$b[j]>a[i]$,$b[k]>a[j]$

$dp[i]<dp[j]<dp[k]$,那么最后的元素就一定最优,且如果有其他不满足关系,对之后没有影响

那么可以用单调栈维护信息

#include <bits/stdc++.h>
#define ll long long
using namespace std;
const ll MAXN=1e5+10;
ll n,dp[MAXN];
struct node
{
ll a,b,h;
}sh[MAXN];
bool cmp(node a,node b)
{
return (a.b>b.b || (a.b==b.b && a.a>b.a));//排序
}
int main()
{
scanf("%lld",&n);
for (ll i=1;i<=n;i++)
scanf("%lld%lld%lld",&sh[i].a,&sh[i].b,&sh[i].h);
sort(sh+1,sh+1+n,cmp);
stack <ll> s;
for (ll i=1;i<=n;i++)
{
while (!s.empty() && sh[s.top()].a>=sh[i].b)//单调栈维护信息
s.pop();
if (!s.empty())
dp[i]=dp[s.top()];//转移
dp[i]+=sh[i].h;
s.push(i);
}
ll ans=0;
for (ll i=1;i<=n;i++)
ans=max(ans,dp[i]);
printf("%lld\n",ans);
}

CF777E Hanoi Factory的更多相关文章

  1. 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 ...

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

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

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

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

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

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

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

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

  6. Codeforces 777E - Hanoi Factory(贪心+栈)

    题目链接:http://codeforces.com/problemset/problem/777/E 题意:有n个环给你内环半径.外环半径和高度,叠这些环还要满足以下要求: ①:下面的环的外径要&g ...

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

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

  8. 【codeforces 777E】Hanoi Factory

    [题目链接]:http://codeforces.com/problemset/problem/777/E [题意] 让你摆汉诺塔片; 要求在上面的片的外圈大于在下面的片的内圈,且小于下面的片的外圈; ...

  9. 考前停课集训 Day1 废

    [友情链接] Day1 今天模拟赛倒数…… 感觉自己菜到爆炸…… 被一个以前初一的倒数爆踩…… 感觉自己白学了. 满分400,自己只有100.真的是倒数第一…… 做了一个T2,其他暴力分全部没有拿到… ...

随机推荐

  1. 【Java】socket编程,输入输出中的问题

    BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream())); PrintWri ...

  2. Pots(POJ - 3414)【BFS 寻找最短路+路径输出】

    Pots(POJ - 3414) 题目链接 算法 BFS 1.这道题问的是给你两个体积分别为A和B的容器,你对它们有三种操作,一种是装满其中一个瓶子,另一种是把其中一个瓶子的水都倒掉,还有一种就是把其 ...

  3. puts()和gets()函数

    puts()和gets()函数 1. puts()函数 puts()函数用来向标准输出设备(屏幕)写字符串并换行, 其调用格式为: puts(s); 其中s为字符串变量(字符串数组名或字符串指针). ...

  4. 【比赛记录】8.21 div2

    A 选择一个点\(B(x,0)\)使得\(|dis(A,B)-x|=k.\) 题目实际上就是找到一个最接近\(n\)的数,使得它可以分成两个数\(a,b,\)使\(a-b=k.\) 我们考虑先分成一个 ...

  5. 轻轻松松学CSS:Grid布局

    网页布局总的来说经历了以下四个阶段: 1.古老的table表格布局,现在基本已被淘汰. 2.float浮动布局(或者position定位布局),借助float.position 等属性等进行布局,这种 ...

  6. Git操作常用的命令都在这里了。

    创建仓库 git init 在当前目录执行,会生成 .git目录文件,这个和SVN一致. 提交到仓库 git commit -m "first commit" -m:表示提交描述, ...

  7. 用cmd下载tp5.0版本

    1.首先进入phpstudy的www目录 composer create-project topthink/think=5.0.* pt5.0的名字 --prefer-dist $ composer ...

  8. CDH5部署三部曲之二:部署和设置

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  9. 修改LiveChart的提示显示位置

    问题:修改LiveChart的提示显示位置 摘要:相信WPF开发者在用LiveCharts的时候会有遇到这个需求.就是产品要求折线图的提示要显示的正常点. 需求:如下图所示.原本显示是在下方并且没有小 ...

  10. MeteoInfoLab脚本示例:TRMM 2A12 HDF数据

    TRMM 2A12 HDF数据是卫星观测的SWATH数据(轨道数据),比格点数据处理起来要麻烦一些.数据的经纬度保存在geolocation变量中,需要先将经纬度数据读出来(均为2维数组),然后读取云 ...