bzoj2131
首先不难想到对t排序,有f[i]=max(f[j])+v[i] tj<=ti且abs(pi-pj)/2<=ti-tj;
要想优化,肯定从优化转移入手
先去绝对值,当pi>=pj时,可得2ti-pi>=2tj-pj
当pi<pj,可得2ti+pi>=2tj+pj; 这样两个式子的两边完全只和当前状态有关系
由于上面是等价变换,所以当同时满足2ti+pi>=2tj+pj和2ti-pi>=2tj-pj可得到tj<=ti且abs(pi-pj)/2<=ti-tj;
这就变成了求一个点左下方的点(包括边界)的点权最大值
这显然可以对一个坐标排序而对另一个坐标离散化然后用树状数组维护前缀最大值
var a,b,c,rank,d,v:array[..] of longint;
f,i,x,y,ans,n,m:longint; function lowbit(x:longint):longint;
begin
exit(x and (-x));
end; function max(a,b:longint):longint;
begin
if a>b then exit(a) else exit(b);
end; procedure swap(var a,b:longint);
var c:longint;
begin
c:=a;
a:=b;
b:=c;
end; procedure sorta(l,r: longint);
var i,j,x,y: longint;
begin
i:=l;
j:=r;
x:=a[(l+r) shr ];
y:=b[(l+r) shr ];
repeat
while (a[i]<x) or ((a[i]=x) and (b[i]<y)) do inc(i);
while (x<a[j]) or ((a[j]=x) and (y<b[j])) do dec(j);
if not(i>j) then
begin
swap(a[i],a[j]);
swap(b[i],b[j]);
swap(v[i],v[j]);
inc(i);
j:=j-;
end;
until i>j;
if l<j then sorta(l,j);
if i<r then sorta(i,r);
end; procedure sortc(l,r: longint);
var i,j,x,y: longint;
begin
i:=l;
j:=r;
x:=c[(l+r) div ];
repeat
while c[i]<x do inc(i);
while x<c[j] do dec(j);
if not(i>j) then
begin
swap(c[i],c[j]);
swap(d[i],d[j]);
inc(i);
j:=j-;
end;
until i>j;
if l<j then sortc(l,j);
if i<r then sortc(i,r);
end; procedure work(x,y:longint);
begin
while x<=m do
begin
c[x]:=max(c[x],y);
x:=x+lowbit(x);
end;
end; function ask(x:longint):longint;
begin
ask:=;
while x> do
begin
ask:=max(ask,c[x]);
x:=x-lowbit(x);
end;
end; begin
readln(m,n);
for i:= to n do
begin
readln(x,y,v[i]);
a[i]:=*x-y;
b[i]:=*x+y;
end;
sorta(,n);
for i:= to n do
begin
c[i]:=b[i];
d[i]:=i;
end;
sortc(,n);
m:=;
rank[d[]]:=;
for i:= to n do
begin
if c[i]<>c[i-] then inc(m);
rank[d[i]]:=m;
end;
fillchar(c,sizeof(c),);
for i:= to n do
begin
f:=ask(rank[i])+v[i];
ans:=max(ans,f);
work(rank[i],f);
end;
writeln(ans);
end.
bzoj2131的更多相关文章
- [bzoj2131]免费的馅饼_树状数组
免费的馅饼 bzoj-2131 题目大意: 注释:$1\le n \le 10^5$,$1\le w \le 10^8$. 想法:首先,想到dp 状态:dp[i][j]表示i分钟在位置j的最大收益 优 ...
- [bzoj2131]免费的馅饼 树状数组优化dp
2131: 免费的馅饼 Time Limit: 10 Sec Memory Limit: 259 MB[Submit][Status][Discuss] Description Input 第一行是 ...
- bzoj2131 免费的馅饼——树状数组优化dp
中文题目,问你最后能最多够得到多少价值的馅饼.因为宽度10^8且个数为10^5.所以不可以用dp[x][y]表示某时间某地点的最大权值. 假设你在x点处接到饼后想去y点接饼.那么需要满足的条件是t[y ...
- 【bzoj2131】免费的馅饼 dp+树状数组
题解: 昨天好像做了个几乎一模一样的题目 按照ti排序 |p[i]-p[j]|<=2*(t[i]-t[j]) 然后去绝对值变为三维偏序 发现后两个式子可以推出ti<tj 所以就变成二维偏序 ...
- BZOJ2131 免费的馅饼【线段树优化DP】
Input 第一行是用空格隔开的二个正整数,分别给出了舞台的宽度W(1到10^8之间)和馅饼的个数n(1到10^5). 接下来n行,每一行给出了一块馅饼的信息.由三个正整数组成,分别表示了每个馅饼落到 ...
- bzoj2131: 免费的馅饼(树状数组)
Description Input 第一行是用空格隔开的二个正整数,分别给出了舞台的宽度W(1到10^8之间)和馅饼的个数n(1到10^5). 接下来n行,每一行给出了一块馅饼的信息.由三个正整数组成 ...
- bzoj2131: 免费的馅饼
首先我们很容易看出是一个DP 然后容易看出是数据结构优化DP 但是这个限制条件有点鬼畜: abs(p[i]-p[j])/2<=(t[i]-t[j]) p[i]>p[j] -> t[i ...
- camp待补
待修莫对 序列自动机 几何积分 沈阳 M 待删除背包 : 分组背包 K-LIS, K次二分(插到最后stop) 问题转化为LIS bzoj2131 hdu4055 最小线段覆盖环 实时路况 分治+f ...
随机推荐
- jquery判断div是否显示或者隐藏
jquery判断div是否显示或者隐藏 很多时候会要判断一个div是不是显示着,没显示要怎么处理,显示的如何处理: 方法很简单,选择到你要判断的div,再用is(':hidden')判断是否隐藏:或者 ...
- webrtc学习———记录一
最近导师让研究一下webrtc,希望将来用到我们的ICT2系统中. 但是从来没有过做web的基础,无论前端还是后端,html.js全都从头学起.html还好说,没有太过复杂的东西. js就有点难度了, ...
- MVP快速开发框架
所谓MVP(Model-View-Presenter)模式.是将APP的结构分为三层: view - UI显示层 view 层主要负责: 提供UI交互 在presenter的控制下修改UI. 将业务事 ...
- Twisted介绍
Twisted诞生于2000年初,作者为Glyph,目的是为了开发网络游戏. Twisted的历史 Glyph开始采用Java多线程,来开发Twisted Reality,结果多线程使得开发变得复杂, ...
- 隐藏TabBar的一些方法小结(适用与各种情况)
在项目中经常遇到隐藏tabBar,实力很多种方法,可以解决不同情况下问题 使用中涉及到view的层次关系,下面的使用方法 1.2不做说明:在使用3.4方法时注意要在tabBar所在的rootView中 ...
- DBA 培训相应内容笔记
014-12-23 slow hang lock 三种常见性能问题 hang;整个数据库不响应,无法创建新连接. hanganalyze输出. dump文件是否有问题信息, 文件是否有其他信息 工具: ...
- 关于 const 成员函数
成员函数如果是const意味着什么? 有两个流行概念:物理常量性和逻辑常量性. C++对常量性的定义采用的是物理常量性概念,即const 成员函数不可以更改对象内任何non-static成员变量.例如 ...
- PHP Ajax简单实例
最近学习Jquery Ajax部分,通过简单例子,比较了下post,get方法的不同 HTML部分 <html> <head> <title>jQuery Ajax ...
- TP缓存设计方案解析
TP的缓存主要依赖Cache类,Cache类其实是一个代理类,Cache类通过getInstance静态方法来获取缓存实例,而getInstance方式实际是调用Cache类的connect方法,该方 ...
- [python]随机数
import random()testlist = [1,3,4,5]a,b = 1,5random().random()() 生成0至1之间的随机浮点数,结果大于等于0.0,小于1.0random. ...