题目如下:给定一个矩阵,没给点上都有一个整数,取值范围为-1~1000。我们的猪脚贪食蛇从最左侧出发,目的地是最右边的任意一个点。每走过一个点,贪食蛇可以获取位置上的分数。
游戏规则如下:
- 贪食蛇只可以往上,往下,往右移动;贪食蛇
- 贪食蛇不可以走回头路:走过的点不可以再走
- 如果贪食蛇不可以到达目的点,返回-1;可以的话返回可以得到的最大的分数
- 贪食蛇可以穿越上下边界,比如从下届穿越到上界只是这时候几分要清零
- 值为1点不可以走
分析:这里应该可以用DFS,BFS这种解法,可是直观上感觉复杂度会很高。因此,这里使用自底向上的动态规划
解法如下:
维护2个表
- 一个是正常走的点,不包括穿越,这个矩阵的值的求取,自底向上的动态规划。先求最右层的的最佳进入点;然后求次右层的最佳进入点…直到第一层。
- 一个是穿越走的表(因为穿越后积分清零,因此需要特别讨论)
- 得到结果后,最后判断第一层的点的最大值是否比其他点的最大值大,如果不是,则不可以到达最右点(此处并不完美,有个小bug是如果前半部分非常大的情况)
1 | public class Snake { |
2016年3月18日09:52:53