hdu 3016 dp+线段树
Man Down
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 2030 Accepted Submission(s): 743
http://hi.baidu.com/abcdxyzk/blog/item/16398781b4f2a5d1bd3e1eed.html
We take a simplified version of this game. We have only two kinds of planks. One kind of the planks contains food and the other one contains nails. And if the man falls on the plank which contains food his energy will increase but if he falls on the plank which
contains nails his energy will decrease. The man can only fall down vertically .We assume that the energy he can increase is unlimited and no borders exist on the left and the right.
First the man has total energy 100 and stands on the topmost plank of all. Then he can choose to go left or right to fall down. If he falls down from the position (Xi,Yi),he will fall onto the nearest plank which satisfies (xl <= xi <= xr)(xl is the leftmost
position of the plank and xr is the rightmost).If no planks satisfies that, the man will fall onto the floor and he finishes his mission. But if the man’s energy is below or equal to 0 , he will die and the game is Over.
Now give you the height and position of all planks. And ask you whether the man can falls onto the floor successfully. If he can, try to calculate the maximum energy he can own when he is on the floor.(Assuming that the floor is infinite and its height is 0,and
all the planks are located at different height).
For each test case, The first line contains one integer N (2 <= N <= 100,000) representing the number of planks.
Then following N lines representing N planks, each line contain 4 integers (h,xl,xr,value)(h > 0, 0 < xl < xr < 100,000, -1000 <= value <= 1000), h represents the plank’s height, xl is the leftmost position of the plank and xr is the rightmost position. Value
represents the energy the man will increase by( if value > 0) or decrease by( if value < 0) when he falls onto this plank.
10 5 10 10
5 3 6 -100
4 7 11 20
2 2 1000 10
/*
hdu 3016 dp+线段树
感觉一直没什么思路
由于每次我们只能从两边跳下来,倒推的答案是唯一的
于是先按照高度排个序,然后就类似于叠木板,先判断当前的两端下面是哪个木板
然后取较大值再加上当前值即可
study~~~
hhh-2016-02-29 22:54:23
*/
#include <algorithm>
#include <cmath>
#include <queue>
#include <iostream>
#include <cstring>
#include <map>
using namespace std;
typedef long long ll;
const int maxn = 100050;
const int inf = 0x3f3f3f3f;
struct node
{
int l,r,mid;
int cov;
} tree[maxn<<2]; struct segment
{
int l,r,h;
int val;
void get()
{
scanf("%d%d%d%d",&h,&l,&r,&val);
}
} seg[maxn];
int dp[maxn];
bool cmp(segment a,segment b)
{
return a.h < b.h;
} void push_up(int r)
{
} void build(int i,int l,int r)
{
tree[i].l = l;
tree[i].r = r;
tree[i].cov = 0;
tree[i].mid = (l +r)>>1;
if(l == r)
{
return ;
}
build(i<<1,l,tree[i].mid);
build(i<<1|1,tree[i].mid+1,r);
push_up(i);
} void push_down(int r)
{
int lson = r<<1,rson = r<<1|1;
if(tree[r].cov != -1)
{
tree[lson].cov = tree[r].cov;
tree[rson].cov = tree[r].cov;
tree[r].cov = -1;
}
} void update(int i,int l,int r,int c)
{
if(tree[i].l >= l && tree[i].r <= r)
{
tree[i].cov = c;
return ;
}
push_down(i);
if(l <= tree[i].mid)
update(i<<1,l,r,c);
if(r > tree[i].mid)
update(i<<1|1,l,r,c);
push_up(i);
} int query(int i,int k)
{
if(tree[i].cov != -1)
{
return tree[i].cov;
}
push_down(i);
if(k <= tree[i].mid)
return query(i<<1,k);
else
return query(i<<1|1,k);
push_up(i);
} int main()
{
int n;
while(scanf("%d",&n) != EOF)
{
build(1,1,maxn);
for(int i =1; i <= n; i++)
{
seg[i].get();
}
memset(dp,0,sizeof(dp));
sort(seg+1,seg+n+1,cmp);
int l=0,r=0;
for(int i = 1; i <= n; i++)
{
if(i > 1)
{
l = query(1,seg[i].l);
r = query(1,seg[i].r);
}
dp[i] = max(dp[l],dp[r])+seg[i].val;
update(1,seg[i].l,seg[i].r,i);
}
dp[n] += 100;
if(dp[n] <= 0)
printf("-1\n");
else
printf("%d\n",dp[n]);
}
return 0;
}
hdu 3016 dp+线段树的更多相关文章
- HDU 3698 DP+线段树
给出N*M矩阵.每一个点建立灯塔有花费.每一个点的灯塔有连接范围,求每一行都建立一个灯塔的最小花费,要求每相邻两行的灯塔能够互相连接.满足 |j-k|≤f(i,j)+f(i+1,k) DP思路,dp[ ...
- ZOJ 3349 Special Subsequence 简单DP + 线段树
同 HDU 2836 只不过改成了求最长子串. DP+线段树单点修改+区间查最值. #include <cstdio> #include <cstring> #include ...
- hdu 4031 attack 线段树区间更新
Attack Time Limit: 5000/3000 MS (Java/Others) Memory Limit: 65768/65768 K (Java/Others)Total Subm ...
- hdu 4288 离线线段树+间隔求和
Coder Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Su ...
- cf834D(dp+线段树区间最值,区间更新)
题目链接: http://codeforces.com/contest/834/problem/D 题意: 每个数字代表一种颜色, 一个区间的美丽度为其中颜色的种数, 给出一个有 n 个元素的数组, ...
- Codeforces Round #620 F2. Animal Observation (hard version) (dp + 线段树)
Codeforces Round #620 F2. Animal Observation (hard version) (dp + 线段树) 题目链接 题意 给定一个nm的矩阵,每行取2k的矩阵,求总 ...
- 题解 HDU 3698 Let the light guide us Dp + 线段树优化
http://acm.hdu.edu.cn/showproblem.php?pid=3698 Let the light guide us Time Limit: 5000/2000 MS (Java ...
- HDU 4719 Oh My Holy FFF(DP+线段树)(2013 ACM/ICPC Asia Regional Online ―― Warmup2)
Description N soldiers from the famous "*FFF* army" is standing in a line, from left to ri ...
- HDU 3698 Let the light guide us(DP+线段树)(2010 Asia Fuzhou Regional Contest)
Description Plain of despair was once an ancient battlefield where those brave spirits had rested in ...
随机推荐
- python的PEP8 代码风格指南
PEP8 代码风格指南 这篇文章原文实际上来自于这里:https://www.python.org/dev/peps/pep-0008/ 知识点 代码排版 字符串引号 表达式和语句中的空格 注释 版本 ...
- 自主学习之RxSwift(一) -----Driver
对于RxSwift,我也是初学者,此系列来记录我学习RxSwift的历程! (一) 想必关于Drive大家一定在RxSwift的Demo中看到过,也一定有些不解,抱着一起学习的态度,来了解一下Driv ...
- (原创)带模板的OLE输出EXCEL
其实带模板的OLE输出EXCEL就是将要输出的EXCEL中一些拥有固定值(如标题,表头行等)的单元格先填充好数据和设置好格式后作为模板上传到SAP 中.这样后续在输出EXCEL时只需从SAP中将模板下 ...
- HTML 样式设计
1.自动设置外边距 style="margin:auto auto;"
- Mongodb 3 查询优化(语句优化、建索引)
一.explain(),语句分析工具 MongoDB 3.0之后,explain的返回与使用方法与之前版本有了很大的变化,介于3.0之后的优秀特色和我们目前所使用给的是3.0.7版本,本文仅针对Mon ...
- CSS揭秘(三)形状
Chapter 3 1. 椭圆 椭圆的实现主要依靠 border-radius 属性,该属性确定边框切圆角的半径大小,可以指定数值 px,也可以使用百分比显示 而且该属性非常灵活,四个角可以分别设置 ...
- Python内置函数(39)——help
英文文档: help([object]) Invoke the built-in help system. (This function is intended for interactive use ...
- 文本分类学习(三) 特征权重(TF/IDF)和特征提取
上一篇中,主要说的就是词袋模型.回顾一下,在进行文本分类之前,我们需要把待分类文本先用词袋模型进行文本表示.首先是将训练集中的所有单词经过去停用词之后组合成一个词袋,或者叫做字典,实际上一个维度很大的 ...
- OAuth2.0学习(1-4)授权方式1-授权码模式(authorization code)
参与者列表: (1) Third-party application:第三方应用程序,又称客户端(client),如:"云冲印".社交应用. (2)HTTP service:HTT ...
- leetcode算法:Island Perimeter
You are given a map in form of a two-dimensional integer grid where 1 represents land and 0 represen ...