首先这种题目肯定是要先排序,以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. 对于百川SDK签名验证的问题

    SDK是要在wantu.taobao.com生成的.而生成这个SDK其实是要上传一个apk,而这个上传其实就是取他的签名而已.验证就是那张yw222那张图片.重点是你上传的apk的签名是不是跟你的生成 ...

  2. JS事件监听 JS:attachEvent和addEventListener 使用方法

    attachEvent与addEventListener区别适应的浏览器版本不同,同时在使用的过程中要注意attachEvent方法          按钮onclickaddEventListene ...

  3. doj常用包

    dojo.raise               抛出一个异常 dojo.errorToString将异常转换为字符串 dojo.render      系统环境对象 dojo.hostenv. ...

  4. Java:Json与其他Java对象集合的转换

    一.引入的jar包 json-lib-2.4-jdk15.jar 二.Json字符串转换为其他对象 1.对象==>json字符串 2.list和Map集合==>json字符串 3.Map集 ...

  5. jQuery AJAX load() 方法

    jQuery load() 方法 jQuery load() 方法是简单但强大的 AJAX 方法. load() 方法从服务器加载数据,并把返回的数据放入被选元素中. 语法: $(selector). ...

  6. 关于java中for和foreach循环

    for循环中的循环条件中的变量只求一次值!具体看最后的图片 foreach语句是java5新增,在遍历数组.集合的时候,foreach拥有不错的性能. foreach是for语句的简化,但是forea ...

  7. cocos2d-x Android 环境搭建问题汇总

    初次接触Cocos2d-x,准备搭建一个hello world的Android环境,问题遇到很多.在此记录,为自己,也为大家,避免重走弯路! 具体的环境搭建,可以参考官方的文档.在Windows7平台 ...

  8. 总结javascript继承的两种方式的N中写法

    最近翻看博客园,总结了一下javascript的继承方式:prototype和copy继承方式. 一.prototype方式 当一个函数被创建时,Function构造函数产生的函数会隐式的被赋予一个p ...

  9. DB2 WIN7 WIN8在指示的文件系统中找不到数据库目录

    前言:win7下一些软件的不正常,跟win7的权限有很大关系.             在win7下安装db2 9.7客户端后,在cmd中运行db2cmd启动clp,输入db2的任何命令都显示:SQL ...

  10. apache2.4下载与安装

    step1 下载apache 百度“apache下载”,找到官网链接,如下 2. 点进去后选择 Files for microsoft windows,如下 3. 前三个任选一个,这里我们选第一个,如 ...