由于每行点的个数不超过1000,所以行内DP可以使用$O(n^2)$算法. 先找到每个点所能直接到达的所有点(x,y,x+y或x-y相同),用排序实现. 第一问:以行为阶段,对于每行,暴力枚举最有路径在这行上的起点和终点,g[x]记录当这行的最优路径以x为起点时,终点应在什么位置,f[x]记录走到x且这一行以x为起点,之后最多还能走到多少个点. 第二问:由于当一行的起点和终点都确定后,决策也是确定的,故只需要沿着DFS一遍即可得到最优路径. 第三问:先考虑怎么找到所有可能在最优路径上的边,同样暴…
LINK:小园丁与老司机 苦心人 天不负 卧薪尝胆 三千越甲可吞吴 AC的刹那 真的是泪目啊 很久以前就写了 当时记得特别清楚 写到肚子疼.. 调到胳膊疼.. ex到根不不想看的程度. 当时wa了 一直不知道哪里错了 今天又调了一下午 调出来了. 思路是这样的: 先进行分层dp dp的时候我是反着dp的 因为无论是考虑后续的方案输出还是建图. 从那些终点到起点进行dp对后续的处理带来非常大的便利. 定义\(f_i\)表示由上一层转移过来的最大值.\(w_i\)表示由同层/上一层转移过来的最大值.…
[BZOJ2839][Noi2015]小园丁与老司机 Description 小园丁 Mr. S 负责看管一片田野,田野可以看作一个二维平面.田野上有 nn 棵许愿树,编号 1,2,3,…,n1,2,3,…,n,每棵树可以看作平面上的一个点,其中第 ii 棵树 (1≤i≤n1≤i≤n) 位于坐标 (xi,yi)(xi,yi).任意两棵树的坐标均不相同. 老司机 Mr. P 从原点 (0,0)(0,0) 驾车出发,进行若干轮行动.每一轮,Mr. P 首先选择任意一个满足以下条件的方向: 为左.右.…
4200: [Noi2015]小园丁与老司机 Time Limit: 20 Sec  Memory Limit: 512 MBSec  Special JudgeSubmit: 106  Solved: 58[Submit][Status][Discuss] Description 小园丁 Mr. S 负责看管一片田野,田野可以看作一个二维平面.田野上有 nn 棵许愿树,编号 1,2,3,…,n1,2,3,…,n,每棵树可以看作平面上的一个点,其中第 ii 棵树 (1≤i≤n1≤i≤n) 位于坐…
[UOJ#132][BZOJ4200][luogu_P2304][NOI2015]小园丁与老司机 试题描述 小园丁 Mr. S 负责看管一片田野,田野可以看作一个二维平面.田野上有 \(n\) 棵许愿树,编号 \(1,2,3, \cdots , n\),每棵树可以看作平面上的一个点,其中第 \(i\) 棵树 \((1 \le i \le n)\) 位于坐标 \((x_i, y_i)\).任意两棵树的坐标均不相同. 老司机 Mr. P 从原点 \((0,0)\) 驾车出发,进行若干轮行动.每一轮,…
洛谷上有个点死活卡不过去,不知道是哪里写丑了orz 参考:https://www.cnblogs.com/ditoly/p/BZOJ4200.html 从上往下dp,设f为不向左右走直接上去的值,g为先向左右走一步再上去,至于找每个方向上的点,分别按x,y,x+y,x-y排序然后二分即可 然后建出左上右上的图,跑有上下界最小流即可 // luogu-judger-enable-o2 #include<iostream> #include<cstdio> #include<cs…
一看上去就是一个二合一的题.那么先解决第一部分求最优路线(及所有可能在最优路线上的线段). 由于不能往下走,可以以y坐标作为阶段.对于y坐标不同的点,我们将可以直接到达的两点连边,显然这样的边的个数是线性的.如果是右上方向那么横纵坐标差相等,左上则和相等,可以直接排序搞定. y坐标相同的点(下称一排),如果某个靠左的点向靠右的点转移,那么这个靠右的点的左边所有点都可以走到.可以先将这一排点用之前的点更新完毕,求出某个点不往左右走的最大值,然后用左边的更新右边,右边的更新左边,每次记录一下最大值就…
来自FallDream的博客,未经允许,请勿转载,谢谢. 小园丁 Mr. S 负责看管一片田野,田野可以看作一个二维平面.田野上有n棵许愿树,编号1,2,3,…,n,每棵树可以看作平面上的一个点,其中第 i棵树 (1≤i≤n) 位于坐标(xi,yi).任意两棵树的坐标均不相同.老司机 Mr. P从原点(0,0)驾车出发,进行若干轮行动.每一轮,Mr.P首先选择任意一个满足以下条件的方向:    1.为左.右.上.左上45∘.右上45∘五个方向之一.    2.沿此方向前进可以到达一棵他尚未许愿过…
看,这是一个传送门 Part A 把坐标离散化,按照纵坐标为第一关键字,横坐标为第二关键字排序 以$f_i$记录来到$i$这个点最多经过点数,那么答案显而易见就是$f_i$加上该层点数 转移的话就是分三种来到这个点的方案 对于每一种考虑: 1)直接上来 2)通过左边某个点上来,把左边所有点都走完 3)通过右边某个点上来,把右边所有点都走完 然后对于每一层维护从左边来的最大值和从右边来的最大值即可 Part B 从任意一个满足答案的结束点往开始点沿任意有效路径走即可 Part C 很显然,找到所有…
题目大意 给出平面直角坐标系中\(n\)(\(n\leq5*10^4\))个点,第\(i\)个点的坐标是\(x_i,y_i(|x_i|\leq10^9,1\leq y_i\leq10^9)\),只有朝正上方.正左方.正右方.右上方45°.左上方45°走的路,只能在给出的点处拐弯 解决两个问题: 1.从点\((0,0)\)出发,只能在没走到过的点处拐弯,求最多能走多少个给出的点并输出方案 2.从点\((0,0)\)或者任意一个给出的点出发,不能朝正左方.正右方走,而且只能走被一种第1问的最优方案包…