洛谷P1002过河卒

洛谷P1002过河卒

题目描述:
棋盘上 A 点有一个过河卒,需要走到目标 B 点。卒行走的规则:可以向下、或者向右。同时在棋盘上 C 点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点。因此称之为“马拦过河卒”。
棋盘用坐标表示,A 点 (0, 0)、B 点 (n,m),同样马的位置坐标是需要给出的。
在这里插入图片描述
现在要求你计算出卒从 A 点能够到达 B 点的路径的条数,假设马的位置是固定不动的,并不是卒走一步马走一步。

解这道题使用的是动态规划算法。动态规划算法就是将一个大问题,分解成许多小问题进行求解。
1.重叠子问题:不同的问题,可能都需要求一个相同问题的解。
2.最优子结构:每一个小问题的解都是最优的,这样才能推出问题的最优解。
基本上满足这两个条件就可以使用动态规划算法。
(我对动态规划算法掌握的非常差,尤其是它的思想没有理解透彻!上学期刚刚学完结果忘得一干二净555后悔当时算法的实验课就这样水过去了)
动态规划算法的过程
1.划分子问题
2.状态表示,选取合适的数据结构(一般是一/二维数组)
3.确定状态转移方程
4.确定边界,初始状态,最小的子问题,最终状态。
其实解决dp题最本质的就是要找到状态转移方程(递推表达式)。而状态转移方程的寻找与经验以及寻找规律息息相关,只有多做DP题目才能更快的求解出方程。
在敲代码的时候最重要的是第四步的表示。

在这道题里,对于我来说最需要理解的地方是马的控制点。所谓“跳跃一步”可能并不包括上下左右,而是以马为中心点的正方形的顶点!这样来理解就说得通了。

这道题的思路是:
1.标记不能走的点
2.得到状态转移方程,最后一个点dp[x][y]就是我们要的路径数。

状态转移方程:在平面内,从点 (0,0)到点 (x,y) 的路径数
d p [ x ] [ y ] = d p [ x − 1 ] [ y ] + d p [ x ] [ y − 1 ] dp[x][y]=dp[x-1][y]+dp[x][y-1] dp[x][y]=dp[x1][y]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值