[NOIP2013]华容道 题解
[NOIP2013]华容道
首先是一种比较显然的做法。
整个棋盘,除了起点,终点和空格,其他的方块是等价的。
对于终点,它始终不会变化,如果搜到终点结束搜索即可,所以我们不需要考虑终点。
所以需要考虑的是空格的位置和起点方块的位置。
定义$f(i1,j1,i2,j2)$为
空格所在坐标$(i1,j1)$ 起点坐标$(i2,j2)$。
对于每一步,可以移动空格周围的一个可移动棋子,将它与空格位置交换。其实等价于空格移动到和空格相邻的棋子。如果该棋子是起点,则将起点更新到原来空格的坐标。
使用bfs,每次步数加一,队列内的状态步数满足单调,第一次得到(区别于dijkstra,不是第一次取出)的任何一个状态就是最优。当第一次得到起点坐标等于终点坐标时,直接返回答案。
如果到最后也没有得到起点坐标等于终点坐标,返回-1表示无解。
这一种做法实际上遍历了可能得到答案的所有情况,应该不是正解。
复杂度O(n²m²q),期望得分80,不太好剪枝。
这道题的正解使我想到了另一道题。进阶指南0x25节中推箱子一题。也使用了bfs。
空格到处乱跑,其实是没有意义的,如果它不在起点的周围四个格子,它永远无法使起点靠近终点。
所以我们固定空格在起点的周围四个点,并用当前的状态去更新以后的状态。
每次取出,一种更新方式是直接与起点交换,二是将该位置交换到起点的另一个方向。
因为每次的增量不保证相同,这一次不保证第一次得到是最优了,所以要使用spfa或者dijkstra来跑最短路。
如果像推箱子一样双重bfs,那么你一定还是会tle,甚至比以前跑得更慢。因为复杂度一点都没有降下来。
问题在这一道题是多测,解决办法是预处理,只要O(n²m²)对每一个点更新一下到其他点的距离即可。
[NOIP2013]华容道 题解的更多相关文章
- [NOIP2013]华容道 题解(搜索)
[NOIP2013]华容道 [题目描述] 这道题根据小时候玩华容道不靠谱的经验还以为是并查集,果断扑街.考后想想也是,数据这么小一定有他的道理. 首先由于是最小步数,所以BFS没跑了.那么我们大可把这 ...
- LOJ2613 NOIP2013 华容道 【最短路】*
LOJ2613 NOIP2013 华容道 LINK 这是个好题,具体题意比较麻烦可以直接看LINK中的链接 然后考虑我们可能的移动方式 首先我们需要把白块移动到需要移动块S的附近(附近四格) 然后我们 ...
- 华容道题解 NOIP2013 思路题!
第一次发紫题题解,居然在发布前太激动,把刚写好的还没发布的题解一个Ctrl+A和Backspace全删了.(所以这是二稿) luogu题目传送门 前置: 做本题一定要有的一些思想: 1.从简思想: 模 ...
- NOIP2013 DAY2题解
DAY2 T1积木大赛 传送门 题目大意:每次可以选区间[l,r]加1,最少选几次,让每个位置有 它应有的高度. 题解:O(n)扫一遍就好了.后一个比前一个的高度低,那么前一个已经把它覆盖了, 如果高 ...
- noip2013华容道
题目描述 [问题描述] 小 B 最近迷上了华容道,可是他总是要花很长的时间才能完成一次.于是,他想到用编程来完成华容道:给定一种局面, 华容道是否根本就无法完成,如果能完成, 最少需要多少时间. 小 ...
- [NOIP2013]华容道
1.题面 小 B 最近迷上了华容道,可是他总是要花很长的时间才能完成一次.于是,他想到用编程来完成华容道:给定一种局面,华容道是否根本就无法完成,如果能完成,最少需要多少时间.小 B 玩的华容道与经典 ...
- NOIP2013 华容道 (棋盘建图+spfa最短路)
#include <cstdio> #include <algorithm> #include <cstring> #include <queue> # ...
- NOIP2013华容道 大爆搜
预处理出每个点周围四个点互相到达的最短路,再在整个图上跑SPFA,要记录路径 #include<cstdio> #include<cstring> #include<io ...
- NOIP2013华容道(BFS+乱搞)
n<=30 * m<=30 的地图上,0表示墙壁,1表示可以放箱子的空地.q<=500次询问,每次问:当空地上唯一没有放箱子的空格子在(ex,ey)时,把位于(sx,sy)的箱子移动 ...
随机推荐
- 8.Javascript-map、reduce、filter 等高阶函数
高阶函数 高阶函数是对其他函数进行操作的函数,可以将它们作为参数或通过返回它们.简单来说,高阶函数是一个函数,它接收函数作为参数或将函数作为输出返回. 例如Array.prototype.map,Ar ...
- cmd查找并杀死被占用的端口的进程
java开发启动server的时候经常会遇到端口被占用的错误提示, 如果不想更换服务配置的端口号,那么怎么解决端口被占用的情况呢? 1. cmd窗口输入netstat -ano ,在列表中查看被占用的 ...
- 记录下hbuilder vue项目打包APP 在IOS上点击延迟的问题
做的项目打包成APP在IOS 上有延迟问题,在安卓下却不会,联想到之前 用IONIC时打包的APP也是 在IOS下有300毫秒延迟问题.所以 只能 认吧. 安装fastclick 插件: npm in ...
- JavaScript 之 navigator 对象
navigator 对象可以查看用户所使用的浏览器类型和系统平台类型. 1.userAgent 通过 userAgent 可以判断用户浏览器的类型. Chrome 浏览器效果: 2.platform ...
- consul:kv
consul除了提供了服务发现的功能,还是提供了kv store的功能,kv store可用于动态配置服务.协调服务.leader选举等场景. consul的kv提供了cli和http的两种接口: h ...
- Linux CentOS7 安装FTP服务器
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/qq_39680564/article/de ...
- Junit测试。
Junit使用: 白盒测试 步骤: 1.定义测试类. 2.定义测试方法:可以单独运行. 3.给方法加@Test,导入junit依赖环境. 判定结果: 红色:失败 绿色:成功. 一般不看输出,而是使用 ...
- Odoo中的模型详解
转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/10826118.html [Odoo中,一切皆模型,连视图都是模型.Odoo将各种数据,如:权限数据.类 ...
- CentOS6.7搭建部署DHCP服务 (详解主配置文件)
DHCP服务 dhcp:动态主机配置协议.从bootp演变而来,引进了租约.续租功能,成为了现在的DHCP. 需要就分配,不需要就回收. 工作过程: 1.当获得地址是,有租约期限,当你关机时,IP地址 ...
- python __getattr__ & __getattribute__ 学习
实例属性的获取和拦截, 仅对实例属性(instance, variable)有效, 非类属性 getattr: 适用于未定义的属性, 即该属性在实例中以及对应的类的基类以及祖先类中都不存在 1. 动态 ...