题目大意
http://hihocoder.com/problemset/problem/1290
此题是微软2016校园招聘4月在线笔试的第三题。是一个机器人走迷宫的问题,你可以将迷宫任意位置的.
变成b
或者反之,机器人开始时向右走,遇到b以后向下走,再遇到b以后往右走,如此走法。求机器人从左上角走到右下角最少的变换次数。
题目分析
思路参考了这篇文章https://glatue.wordpress.com/2016/04/13/hihocoder-1290-demo-day-%E5%BE%AE%E8%BD%AF%E9%A2%98/
利用动态规划的思想,需要利用两个二维数组dpx和dpy,因为每个位置机器人的方向都可以是向右或者向下,代表从左上角走道当前位置最少需要变换的次数。
转移方程:
|
|
以第一个转移方程为例,含义是(i,j)位置向右方向的机器人一定是有(i,j-1)向右方向或者(i,j-1)向下方向并且(i+1,j-1)为b的机器人过来的,当然还要要求(i,j)不是b。第二个转移方程也同理。注意初始化的条件,为方便处理边界的dpx,dpy值都为最大值,但是dpx[1][0]
一定要为0,因为初始条件是机器人在左上角向右走的,如果dpx[1][0]
是最大值的话那么永远也得不到最少的变换次数了。
最后返回的是dpx[n][m]
和 dpy[n][m]
的最小值。
代码
|
|
时间复杂度O(n*m)
记忆化搜索版本
|
|