hdu 3016 Man Down
题意:给你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的更多相关文章
- HDU 3016 Man Down (线段树+dp)
HDU 3016 Man Down (线段树+dp) Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Ja ...
- hdu 3016 dp+线段树
Man Down Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total S ...
- HDU 3016 Man Down(线段树)
HDU 3016 Man Down 题目链接 题意:是男人就下100层的游戏的简单版,每次仅仅能从两端下落.求落地最大血量 思路:利用线段树能够处理出每一个线段能来自哪几个线段.然后就是dag最长路了 ...
- HDU 3016 线段树区间更新+spfa
Man Down Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
- [欧拉回路] hdu 3018 Ant Trip
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3018 Ant Trip Time Limit: 2000/1000 MS (Java/Others) ...
- HDOJ 2111. Saving HDU 贪心 结构体排序
Saving HDU Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- 【HDU 3037】Saving Beans Lucas定理模板
http://acm.hdu.edu.cn/showproblem.php?pid=3037 Lucas定理模板. 现在才写,noip滚粗前兆QAQ #include<cstdio> #i ...
- hdu 4859 海岸线 Bestcoder Round 1
http://acm.hdu.edu.cn/showproblem.php?pid=4859 题目大意: 在一个矩形周围都是海,这个矩形中有陆地,深海和浅海.浅海是可以填成陆地的. 求最多有多少条方格 ...
- HDU 4569 Special equations(取模)
Special equations Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u S ...
随机推荐
- ionic build - 修改gradle路径提升速度和成功率
ionic build 不成功很多时候是因为下载gradle太慢, 我们可以下载好gradle然后修改配置文件, 从而省去这个烦人的下载过程 1. 下载报错时的gradle zip文件, 或者直接查看 ...
- C# System.Collections.ArrayList
using System; using System.Collections; public class SamplesArrayList { public static void Main() { ...
- 微信公众号基础02_获取accessToken和用户信息
上一篇分享了搭建微信公众号server,本文分享一下假设获取access_Token和用户信息.工具还是新浪云SAE 1.获取access_Token 相见开发文档:https://mp.weixin ...
- Vue 温故而知新 props如何双向属性绑定
传送门:https://cn.vuejs.org/v2/guide/components-custom-events.html https://segmentfault.com/q/101000001 ...
- Atitit 项目文档规范化与必备文档与推荐文档列表
Atitit 项目文档规范化与必备文档与推荐文档列表 ===========比较重要的必备文档========== 项目组名单通讯录( 包括项目组,客户沟通人等 需求文档 原型ui文档 开发计划表 项 ...
- 关于烦躁的网页编码问题utf-8,gb2312。终于自己实践了一遍
俗话说实践是检验真理的唯一标准,的确如此. 自己一直比较懒,虽然觉得大牛应该一个记事本全部搞定,但自己还是喜欢用Dw或者Vs写好网页的架构,因为总觉得用notepad还要自己导入声明,而gVim还没有 ...
- MXNET:欠拟合、过拟合和模型选择
当模型在训练数据集上更准确时,在测试数据集上的准确率既可能上升又可能下降.这是为什么呢? 训练误差和泛化误差 在解释上面提到的现象之前,我们需要区分训练误差(training error)和泛化误差( ...
- CFA一级知识点总结
更多来自: www.vipcoursea.com Ethics 部分 Objective of codes and standard:永远是为了maintain public trust in ...
- ubuntu14.04 中virtual box 加入 usb
参考两篇文章: 1.http://www.cnblogs.com/ericsun/archive/2013/06/10/3130679.html 2.http://www.360doc.com/con ...
- Cisco DHCP Snooping + IPSG 功能实现
什么是DHCP? DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是一个局域网的网络协议,前身是BOOTP协议, 使用UDP协议工作,常用的2个端口 ...