首先这种题目肯定是要先排序,以x为第一关键字,y为第二关键字
不难想到O(n2)的dp,下面显然要优化
不难发现,由于两点的耗费是坐标差的平方的和,不带根号,
因此,不难发现一个很有用的性质,如果从A点能到C点,C点到B,这样走C点一定比不走C点优
于是不难想到我们要维护y坐标上的上x最大的点,这个点一定是当前相同y坐标中收益最大的
设f[i]为到点i的最大收益,d[y]为当前纵坐标y上最大收益,则f[i]=max(d[k]-dis+v) 1<=k<=y[i]
但这样还是超时了,我们要在进一步优化
由于m<=1000,而n比较大,所以会有许多点有相同的x坐标
对于拥有相同x坐标的点,除了y最小的点我们需要从1开始转移
很容易想到,其他点完全只需要从y[i-1]~y[i]内转移
于是这样就过了

 var w:array[..,..] of longint;
a,b,v,r:array[..] of longint;
f:array[..] of longint;
ans,j,n,m,i,x,y,z,t:longint; function max(a,b:longint):longint;
begin
if a>b then exit(a) else exit(b);
end; function dis(x,y,a,b:longint):longint;
begin
exit(sqr(x-a)+sqr(y-b));
end; begin
readln(n,m);
for i:= to n do
begin
readln(x,y,z);
w[x,y]:=z;
end;
for i:= to m do
for j:= to m do
if w[i,j]<> then
begin
inc(t);
a[t]:=i;
b[t]:=j;
v[t]:=w[i,j];
end; f[]:=v[];
r[]:=;
for i:= to n do
begin
ans:=-;
if a[i]=a[i-] then
begin
for j:=b[i-] to b[i] do
if r[j]<> then ans:=max(ans,f[j]-dis(a[i],b[i],r[j],j));
end
else begin
for j:= to b[i] do
if r[j]<> then ans:=max(ans,f[j]-dis(a[i],b[i],r[j],j));
end;
ans:=ans+v[i];
f[b[i]]:=ans;
r[b[i]]:=a[i];
end;
writeln(ans);
end.

bzoj1560的更多相关文章

  1. 【BZOJ1560】[JSOI2009]火星藏宝图(贪心,动态规划)

    [BZOJ1560][JSOI2009]火星藏宝图(贪心,动态规划) 题面 BZOJ 洛谷 题解 既然所有的位置的权值都大于\(0\),那么就可以直接贪心,按照行为第一关键字,列为第二关键字,来转移. ...

  2. 【BZOJ1560】【JSOI2009】火星藏宝图 [DP]

    火星藏宝图 Time Limit: 10 Sec  Memory Limit: 64 MB[Submit][Status][Discuss] Description Input Output Samp ...

  3. bzoj1560:[JSOI2009]火星藏宝图(斜率优化)

    题目描述 在火星游玩多日,jyy偶然地发现了一张藏宝图.根据藏宝图上说法,宝藏被埋藏在一个巨大的湖里的N个岛上(2<=N<=200,000).为了方便描述,地图把整个湖划分成M行M列(1& ...

  4. bzoj1560: [JSOI2009]火星藏宝图

    考虑到一个性质,A到B的距离一定不小于A到C再到B的距离,因为能够到达这三个点不可能构成锐角三角形 对于当前点的更新只需要找那些无法经过其它点再到当前点的点,相当于是一个y坐标单调减的上凸包,随便维护 ...

随机推荐

  1. jQuery滑动并响应事件

    jQuery滑动并打开指定页面: <!DOCTYPE html> <html> <head> <script src="http://code.jq ...

  2. 图像本地预览插件(基于JQUERY、HTML5)

    最近是被这项目搞疯了.害我天天写插件,上周才写,现在就继续吧..... 说说这个吧.主要是用于本地图像预览的.我们知道在以前,图像预览一般都很麻烦,一般都是异步上传然后返回路径,动态设置路径,但是这样 ...

  3. JS手动创建标签

    代码: <html> <head> <title>js标签属性的添加</title> <script > function setxxx() ...

  4. [XML] Resource帮助类

    点击下载 Resources.rar /// <summary> /// 类说明:Resources /// 编 码 人:苏飞 /// 联系方式:361983679 /// 更新网站:[u ...

  5. union与union all 的区别

    Union与Union All的区别 如果我们需要将两个select语句的结果作为一个整体显示出来,我们就需要用到union或者union all关键字.union(或称为联合)的作用是将多个结果合并 ...

  6. C# 匿名表达式(Lambda表达式)

    匿名表达式 这次来说说Lambda表达式吧,反正也简单,我也不像其他高手那样强调来强调去,只讲一下方法: 准备条件如下: 第一,匿名表达式必须存在与之对应的委托. 只要存在相对应的委托就可以了.接下来 ...

  7. C#获取数组的行和列数程序代码

    using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Cons ...

  8. 【转】通用分页用户控件(DataGrid,DataList,Repeater都可以用它来分页)

    通用分页控件(DataGrid,DataList,Repeater都可以用它来分页) 1.建立用户控件Pager.ascx 1.1 html </ASP:LABEL></TD> ...

  9. QT UI 如果发现布局之后,button不在父widget的中间

    如果发现布局之后,button不在父widget的中间: 调整父widget的布局参数:

  10. centos7 玩aapt 安卓应用apk解包工具的安装

    最近在做一个应用市场的项目,需要在centos7下面对apk解包读取其信息,这就想到了使用Google的解包工具aapt,但是由于中国的原因,国内访问原生工具的地址就有些麻烦,这里就贴出地址:http ...