题意:给你n个板子,初始100生命,到达每个板子加血或者扣血,求从最上面的板子落到地面的最优解

题解:对于每一个木板,只有从左下或者从右下,所以从下往上来看,到达第n个木板的最优解为 dp[n] = max(dp[l],dp[r]) + value[n]

  l 和 r 为n的左右端点下方的木板序号,然后,维护一个线段树,当一个木板计算完毕后,维护木板左端点到木板右端点的叶子节点的值为木板的序号(把下方的木板或者地板都盖住了!!)

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#define CLR(a,b) memset(a,b,sizeof(a))
using namespace std;
#define maxn 100010
int tree[maxn<<2];
int dp[maxn];struct Node
{int l,r,h,val;
}node[maxn];bool cmp(Node a,Node b)
{return a.h < b.h;
}void PushUp(int rt)
{;
}void Build(int l,int r,int rt)
{
//    cout<<l<<" "<<r<<endl;tree[rt] = 0;if( r == l ){return ;}int m = (r+l)>>1;Build(l,m,rt<<1);Build(m+1,r,rt<<1|1);PushUp(rt);
}void PushDown(int rt)
{if(tree[rt]){tree[rt<<1] = tree[rt];tree[rt<<1|1] = tree[rt];}tree[rt] = 0;
}void Update(int L,int R,int c,int l,int r,int rt)
{if( l >= L && r <= R ){tree[rt] = c;return ;}int m = (r+l)>>1;PushDown(rt);if(L<=m) Update(L,R,c,l,m,rt<<1);if(R>m)  Update(L,R,c,m+1,r,rt<<1|1);PushUp(rt);
}int Query(int L,int l,int r,int rt)
{if( l == L && r == L){return tree[rt];}int m = (r+l)>>1;PushDown(rt);if(L<=m) return Query(L,l,m,rt<<1);if(L> m) return Query(L,m+1,r,rt<<1|1);
}int main()
{int n;
//    freopen("in.txt","r",stdin);while(scanf("%d",&n)!=EOF){Build(1,maxn,1);CLR(dp,0);for(int i=1;i<=n;i++)scanf("%d%d%d%d",&node[i].h,&node[i].l,&node[i].r,&node[i].val);sort(node+1,node+1+n,cmp);for(int i=1;i<=n;i++){int l = Query(node[i].l,1,maxn,1);int r = Query(node[i].r,1,maxn,1);dp[i] = max(dp[l],dp[r]) + node[i].val;Update(node[i].l,node[i].r,i,1,maxn,1);}dp[n]+=100;if(dp[n]<=0)printf("-1\n");elseprintf("%d\n",dp[n]);}return 0;
}

转载于:https://www.cnblogs.com/Tokisaki-Kurumi-/p/8669978.html

hdu 3016 Man Down相关推荐

  1. HDU 3016 Man Down (线段树+dp)

    HDU 3016 Man Down (线段树+dp) Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Ja ...

  2. hdu 3016 Man Down(简单线段树简单DP)

    Man Down Time Limit: 2000/1000 MS (Java/Others)Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  3. HDU 3016 Man Down——线段树

    传送门 Problem Description The Game "Man Down 100 floors" is an famous and interesting game.Y ...

  4. HDU ACM Steps 攻略

    HDU ACM Steps 攻略- Admin 2011年10月14日 名人名言:未来是光明而美丽的,爱它吧,向它突进,为它工作,迎接它,尽可能地使它成为现实吧!--车尔尼雪夫斯基 总结了一下ACM ...

  5. HDU——1106排序(istringstream的使用、STLvector练习)

    排序 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submiss ...

  6. hdu 5438 Ponds 拓扑排序

    Ponds Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/contests/contest_showproblem ...

  7. HDU 1248 寒冰王座(全然背包:入门题)

    HDU 1248 寒冰王座(全然背包:入门题) http://acm.hdu.edu.cn/showproblem.php?pid=1248 题意: 不死族的巫妖王发工资拉,死亡骑士拿到一张N元的钞票 ...

  8. hdu 1312 Red and Black 解题报告

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1312 第二条深搜,题目并不难,但是做了我好久好久,由于一个细节,让我赌上了一个晚上的时间. 题目大意: ...

  9. HDU 1429 胜利大逃亡(续) (BFS+位压缩)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1429 胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others)  ...

最新文章

  1. R语言统计代码运行耗时实战:计算代码运行时间、使用proc.time函数计算代码运行时间
  2. 图灵4月精彩新书预告
  3. 征战蓝桥 —— 2018年第九届 —— C/C++B组第1题——第几天
  4. localtime与localtime_r
  5. html文字向上移动10px,HTML文字移动特效代码
  6. 第七节:ES6为数值做了哪些扩展?
  7. 利用 Python 写一个颜值测试小工具
  8. docker compose详解
  9. 数据库联结使用及分类
  10. 计算机网络考试卷2014B答案,计算机网络考试卷2014B
  11. 如何在阿里云里申请并使用免费https证书SSL、nginx下配置https证书
  12. 2021新款外卖返利系统源码,美团/饿了么返利三级分销源码外卖返利源码下载
  13. Tomcat优化大全,进来看了,真就会了
  14. 服务器dump文件位置,使用windbg分析服务器的DUMP文件
  15. JAVA设计模式-11-代理模式(动态)(一)
  16. 从西直门立交桥谈IT架构与重构(干货)
  17. pyltp的初始化报错:segmentor = Segmentor() # 初始化实例TypeError: __init__(): incompatible constructor argument
  18. Pytorch优化器Optimizer
  19. 从一个CFS调度案例谈Linux系统卡顿的根源
  20. 机器学习中的MR和MRR

热门文章

  1. linux查看文件使用情况,linux查看文件句柄使用情况
  2. Python第三方库的安装,升级以及版本查看
  3. 东北电力大学计算机专业几本,东北电力大学是几本?东北电力大学怎么样?
  4. 【技术解决方案】开发工具源码安装包大全
  5. mysql如何让表建立连接吗_MySQL 表与表之间建立关系
  6. 轨道运营管理专业自荐书_轨道运营管理专业自荐信x
  7. 初学者宝典:C语言入门基础知识大全(中)
  8. 为全局变量赋值_实例分析如何远离漫天飞舞的全局变量
  9. php能打开.shp文件吗,shp文件是什么格式的
  10. kotlin自定义View出现 java.lang.ClassNotFoundException