动态规划的引入1

动态规划的引入

之前学习过一段时间的动态规划,但掌握的不够牢固,实际做题时还是不能灵活的运用,所以打算在寒假对这部分知识进行学习和巩固,按照洛谷的提单分为五个部分进行学习:
1.动态规划的引入
2.线性状态动态规划
3.区间与环形动态规划
4.树与图上的动态规划
5.状态压缩动态规划
本文题目选自第一部分的练习内容

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

解题过程:这道题很明显要用动态规划的思想来做,直接算出有多少条路是不现实的,所以拆分成算每一格有多少条路,并把马的控制点做为动态规划的条件:
1.当上一步和左一步都是马的控制点时,到这一步的路数为: 0+0 = 0
2.当仅有上一步是马的控制点时,到这一步的路数为: 0 + 左一步的路数 = 左一步的路数
3.当仅有左一步是马的控制点时,到这一步的路数为: 上一步的路数 + 0 = 上一步的路数
3.当上一步和左一步都不是马的控制点时,到这一步的路数为: 上一步的路数+左一步的路数
代码为:

if(area[i-1][j]==-1 && area[i][j-1]==-1) area[i][j] = 0;
	else if(area[i-1][j]==-1) area[i][j] = area[i][j-1];
		else if(area[i][j-1]==-1) area[i][j] = area[i-1][j];
			else area[i][j] = area[i][j-1] + area[i-1][j];

注意判断边界,即马的控制点会不会超出棋盘范围:

if(hx-2 >= 0 && hy-1 >=
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

asdfghtyjukilo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值