题意:给你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");
else
printf("%d\n",dp[n]); } return 0;
}

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 dp+线段树

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

  3. HDU 3016 Man Down(线段树)

    HDU 3016 Man Down 题目链接 题意:是男人就下100层的游戏的简单版,每次仅仅能从两端下落.求落地最大血量 思路:利用线段树能够处理出每一个线段能来自哪几个线段.然后就是dag最长路了 ...

  4. HDU 3016 线段树区间更新+spfa

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

  5. [欧拉回路] hdu 3018 Ant Trip

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3018 Ant Trip Time Limit: 2000/1000 MS (Java/Others) ...

  6. HDOJ 2111. Saving HDU 贪心 结构体排序

    Saving HDU Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  7. 【HDU 3037】Saving Beans Lucas定理模板

    http://acm.hdu.edu.cn/showproblem.php?pid=3037 Lucas定理模板. 现在才写,noip滚粗前兆QAQ #include<cstdio> #i ...

  8. hdu 4859 海岸线 Bestcoder Round 1

    http://acm.hdu.edu.cn/showproblem.php?pid=4859 题目大意: 在一个矩形周围都是海,这个矩形中有陆地,深海和浅海.浅海是可以填成陆地的. 求最多有多少条方格 ...

  9. HDU 4569 Special equations(取模)

    Special equations Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u S ...

随机推荐

  1. ionic build - 修改gradle路径提升速度和成功率

    ionic build 不成功很多时候是因为下载gradle太慢, 我们可以下载好gradle然后修改配置文件, 从而省去这个烦人的下载过程 1. 下载报错时的gradle zip文件, 或者直接查看 ...

  2. C# System.Collections.ArrayList

    using System; using System.Collections; public class SamplesArrayList { public static void Main() { ...

  3. 微信公众号基础02_获取accessToken和用户信息

    上一篇分享了搭建微信公众号server,本文分享一下假设获取access_Token和用户信息.工具还是新浪云SAE 1.获取access_Token 相见开发文档:https://mp.weixin ...

  4. Vue 温故而知新 props如何双向属性绑定

    传送门:https://cn.vuejs.org/v2/guide/components-custom-events.html https://segmentfault.com/q/101000001 ...

  5. Atitit 项目文档规范化与必备文档与推荐文档列表

    Atitit 项目文档规范化与必备文档与推荐文档列表 ===========比较重要的必备文档========== 项目组名单通讯录( 包括项目组,客户沟通人等 需求文档 原型ui文档 开发计划表 项 ...

  6. 关于烦躁的网页编码问题utf-8,gb2312。终于自己实践了一遍

    俗话说实践是检验真理的唯一标准,的确如此. 自己一直比较懒,虽然觉得大牛应该一个记事本全部搞定,但自己还是喜欢用Dw或者Vs写好网页的架构,因为总觉得用notepad还要自己导入声明,而gVim还没有 ...

  7. MXNET:欠拟合、过拟合和模型选择

    当模型在训练数据集上更准确时,在测试数据集上的准确率既可能上升又可能下降.这是为什么呢? 训练误差和泛化误差 在解释上面提到的现象之前,我们需要区分训练误差(training error)和泛化误差( ...

  8. CFA一级知识点总结

    更多来自:   www.vipcoursea.com   Ethics 部分 Objective of codes and standard:永远是为了maintain public trust in ...

  9. ubuntu14.04 中virtual box 加入 usb

    参考两篇文章: 1.http://www.cnblogs.com/ericsun/archive/2013/06/10/3130679.html 2.http://www.360doc.com/con ...

  10. Cisco DHCP Snooping + IPSG 功能实现

    什么是DHCP? DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是一个局域网的网络协议,前身是BOOTP协议, 使用UDP协议工作,常用的2个端口 ...