bzoj1560: [JSOI2009]火星藏宝图
考虑到一个性质,A到B的距离一定不小于A到C再到B的距离,因为能够到达这三个点不可能构成锐角三角形
对于当前点的更新只需要找那些无法经过其它点再到当前点的点,相当于是一个y坐标单调减的上凸包,随便维护下
卡常让我迷失了心智
#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std;
const int inf=(<<);
inline int sqr(int x){return x*x;}
inline int read()
{
int x=,f=;char ch=getchar();
while(!isdigit(ch)){if(ch=='-')f=-;ch=getchar();}
while(isdigit(ch)){x=x*+ch-'';ch=getchar();}
return x*f;
} struct point{int x,y,d;}p[];
inline bool cmp(point p1,point p2){return p1.x==p2.x?p1.y<p2.y:p1.x<p2.x;}
inline int dis(int i,int j){return sqr(p[i].x-p[j].x)+sqr(p[i].y-p[j].y);} int up[][];
int f[];
int main()
{
freopen("a.in","r",stdin);
freopen("a.out","w",stdout);
int n,m,k,i,j;
n=read(),m=read();
for(i=;i<=n;i++)
p[i].x=read(),p[i].y=read(),p[i].d=read();
sort(p+,p+n+,cmp);
for(i=;i<=n;i++)up[p[i].x][p[i].y]=i; for(j=m;j>=;j--)
for(i=;i<=m;i++)
if(!up[i][j])up[i][j]=up[i][j+]; f[]=p[].d; p[].y=inf;
for(i=;i<=n;i++)
{
k=;
f[i]=-inf; if( !(up[p[i].x][k]==i||p[up[p[i].x][k]].y>p[i].y) )
{
while(k<p[i].y&& !(up[p[i].x][k+]==i||p[up[p[i].x][k+]].y>p[i].y) )k=p[up[p[i].x][k+]].y; if(f[up[p[i].x][k]]!=-inf)
f[i]=max(f[i],f[up[p[i].x][k]]-dis(i,up[p[i].x][k])+p[i].d);
} for(j=p[i].x-;j>=;j--)//纵
{
if( !(p[up[j][k]].y>p[i].y) )
{
while(k<p[i].y&& p[up[j][k+]].y<=p[i].y )k=p[up[j][k+]].y; if(f[up[j][k]]!=-inf)
f[i]=max(f[i],f[up[j][k]]-dis(i,up[j][k])+p[i].d);
k++;
}
}
}
printf("%d\n",f[n]); return ;
}
bzoj1560: [JSOI2009]火星藏宝图的更多相关文章
- 【BZOJ1560】[JSOI2009]火星藏宝图(贪心,动态规划)
[BZOJ1560][JSOI2009]火星藏宝图(贪心,动态规划) 题面 BZOJ 洛谷 题解 既然所有的位置的权值都大于\(0\),那么就可以直接贪心,按照行为第一关键字,列为第二关键字,来转移. ...
- bzoj 1560 [JSOI2009]火星藏宝图(DP)
1560: [JSOI2009]火星藏宝图 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 647 Solved: 309[Submit][Status ...
- bzoj1560:[JSOI2009]火星藏宝图(斜率优化)
题目描述 在火星游玩多日,jyy偶然地发现了一张藏宝图.根据藏宝图上说法,宝藏被埋藏在一个巨大的湖里的N个岛上(2<=N<=200,000).为了方便描述,地图把整个湖划分成M行M列(1& ...
- 【[JSOI2009]火星藏宝图】
这里是\(sb\)的\(O(nm)\)做法 上一篇题解里写的\(O(nm)\)做法并没有看懂,我真是好菜啊 这是一个用了斜率优化,但是复杂度仍然是\(O(nm)\)的做法 我们还是先写出简单的\(dp ...
- [luogu4056 JSOI2009] 火星藏宝图 (贪心 dp)
传送门 Solution 一个显然的贪心:选的点数越多越好.这个随便推推就知道了. 那么我们就贪心的从一列上挑最靠下的转移 直接转移不斜率优化复杂度\(O(nm)\),吸一口O2过了... Code ...
- 【BZOJ1560】【JSOI2009】火星藏宝图 [DP]
火星藏宝图 Time Limit: 10 Sec Memory Limit: 64 MB[Submit][Status][Discuss] Description Input Output Samp ...
- BZOJ 1560 火星藏宝图(DP)
思路:发现如果从A能到B,B能到C,那么一定A能到C,且根据不等式:A^2+B^2<=(A+B)^2,而且权值没有负数,因此经过B比不经过B要优,因此,我们从左上到右下做,每一列,我们只记录之前 ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- dp专练
dp练习. codevs 1048 石子归并 区间dp #include<cstdio> #include<algorithm> #include<cstring> ...
随机推荐
- 查看linux ubuntu版本
ubuntu版本: lsb_release -a linux版本: uname -a proc目录下记录的当前系统运行的各种数据,version记录的版本信息直接可以通过cat查看到. 使用命令:c ...
- datatable生成easyui的json格式汇总( 转)
转自 http://www.cnblogs.com/WikStone/archive/2012/07/02/2573137.html 目前项目没有使用第三方的json转换库,都是根据json格式进行字 ...
- HDU 5242 利用树链剖分思想进行贪心
题目大意: 在给定带权值节点的树上从1开始不回头走到某个底端点后得到所有经过的点的权值后,这些点权值修改为0,到达底部后重新回到1,继续走,问走k次,最多能得到多少权值之和 这其实就是相当于每一次都走 ...
- 巴蜀3540 -- 【Violet 6 最终话】蒲公英
Description 原题的时间限制是 2s . 亲爱的哥哥: 你在那个城市里面过得好吗? 我在家里面最近很开心呢.昨天晚上奶奶给我讲了那个叫「绝望」的大坏蛋的故事的说!它把人们的房子和田地搞坏,还 ...
- Codevs 2693 上学路线(施工)
时间限制: 2 s 空间限制: 16000 KB 题目等级 : 黄金 Gold 题目描述 Description 问题描述 你所在的城市街道好像一个棋盘,有a条南北方向的街道和b条东西方向的街道. 南 ...
- .htaccess重写、安全防护、文件访问权限
今天在<外刊IT评论>上看见了关于.htaccess的使用总结,觉得很不错的,因为wp博客还有其他的php的web服务站点好多都是用.htaccess来管理比如效率以及安全的问题,有必要来 ...
- softmax函数理解
https://www.zhihu.com/question/23765351 因为这里不太方便编辑公式,所以很多公式推导的细节都已经略去了,如果对相关数学表述感兴趣的话,请戳这里的链接Softm ...
- P2863 [USACO06JAN]牛的舞会The Cow Prom
洛谷——P2863 [USACO06JAN]牛的舞会The Cow Prom 题目描述 The N (2 <= N <= 10,000) cows are so excited: it's ...
- Permutation Sequence(超时,排列问题)
The set [1,2,3,…,n] contains a total of n! unique permutations. By listing and labeling all of the p ...
- 使用Spring Data Redis操作Redis(单机版)
说明:请注意Spring Data Redis的版本以及Spring的版本!最新版本的Spring Data Redis已经去除Jedis的依赖包,需要自行引入,这个是个坑点.并且会与一些低版本的Sp ...