【题目链接】

ybt 1314:【例3.6】过河卒(Noip2002)
ybt 1921:【02NOIP普及组】过河卒
洛谷 P1002 [NOIP2002 普及组] 过河卒

【题目考点】

1. 坐标型动态规划

【解题思路】

设状态数组dp,dp[i][j]表示从(0,0)到(i,j)的路径条数。
考虑卒到(i,j)位置的前一个位置可能是哪里,把可能的到(i,j)的前一个位置的路径数量加和,即为到(i,j)的路径数量。

  • 如果(i,j)是(0,0),到起始位置的路径数量为1,所以:dp[0][0]=1;
  • 如果这个位置是马的控制点,那么到这里的路径数量为0。
  • 除了上述情况,如果是在第0行,即i为0,那么到(i,j)的前一个位置只能是(i,j-1)。所以如果i为0:dp[i][j] = dp[i][j-1];
  • 除了上述情况,如果是在第0列,即j为0,那么到(i,j)的前一个位置只能是(i-1,j)。所以如果j为0:dp[i][j] = dp[i-1][j];
  • 除了上述情况,到(i,j)的前一个位置只能是它上面的位置(i-1,j)和左边的位置(i,j-1),所以:dp[i][j] = dp[i-1][j]+dp[i][j-1];

先将dp数组初始化为-1,把马的控制点位置的值设为0。(0,0)位置设为1,而后遍历二维数组dp,按照上述递推关系做递推。最后输出dp[n][m]
【注意】:最终结果超出了int可以表示的范围,dp数组必须设为long long类型。

【题解代码】

解法1:递推 用dp的值判断一个位置是否被马控制

dp[i][j]为0表示该位置被马控制,为-1表示该位置尚未赋值。

#include <bits/stdc++.h>
using namespace std;
int dir[8][2]={{-1,2},{-1,-2},{1,2},{1,-2},{-2,1},{-2,-1},{2,1},{2,-1}};//方向数组:马走日下一步到的位置和当前位置的坐标差值
int main()
{ long long dp[25][25];//dp[i][j]:表示从(0,0)到(i,j)的路径条数。memset(dp, -1, sizeof(dp)); int n, m, cx, cy;cin >> n >> m >> cx >> cy;dp[cx][cy] = 0;//设置马的控制点,值为0 for(int i = 0; i < 8; ++i){int x = cx + dir[i][0], y = cy + dir[i][1];if(x >= 0 && x <= n && y >= 0 && y <= m)dp[x][y] = 0;}dp[0][0] = 1;for(int i = 0; i <= n; ++i)for(int j = 0; j <= m; ++j){if(dp[i][j] == 0)//马控制的点不做计算 continue;if(i == 0 && j == 0)dp[i][j] = 1;else if(i == 0)dp[i][j] = dp[i][j-1];else if(j == 0)dp[i][j] = dp[i-1][j];elsedp[i][j] = dp[i-1][j] + dp[i][j-1];}cout << dp[n][m];return 0;
}

解法2:递推 设vis数字表示某位置是否被马控制

vis[i][j]为真表示该位置被马控制

#include <bits/stdc++.h>
using namespace std;
int dir[8][2]={{-1,2},{-1,-2},{1,2},{1,-2},{-2,1},{-2,-1},{2,1},{2,-1}};//方向数组:马走日下一步到的位置和当前位置的坐标差值
long long dp[25][25];//dp[i][j]:表示从(0,0)到(i,j)的路径条数。初值为0。
bool vis[25][25];//vis[i][j]:表示(i,j)位置是否被马控制
int main()
{ int n, m, cx, cy;cin >> n >> m >> cx >> cy;vis[cx][cy] = true;//设置马的控制点for(int i = 0; i < 8; ++i){int x = cx + dir[i][0], y = cy + dir[i][1];if(x >= 0 && x <= n && y >= 0 && y <= m)vis[x][y] = true;}dp[0][0] = 1;for(int i = 0; i <= n; ++i)for(int j = 0; j <= m; ++j){if(vis[i][j])//马控制的点不做计算 continue;if(i == 0 && j == 0)dp[i][j] = 1;else if(i == 0)dp[i][j] = dp[i][j-1];else if(j == 0)dp[i][j] = dp[i-1][j];elsedp[i][j] = dp[i-1][j] + dp[i][j-1];}cout << dp[n][m];return 0;
}

信息学奥赛一本通 1314:【例3.6】过河卒(Noip2002) | 1921:【02NOIP普及组】过河卒 | 洛谷 P1002 [NOIP2002 普及组] 过河卒相关推荐

  1. 信息学奥赛一本通 1116:最长平台 | OpenJudge NOI 1.9 12:最长平台 | 洛谷 B2097 最长平台

    [题目链接] ybt 1116:最长平台 OpenJudge NOI 1.9 12:最长平台 洛谷 B2097 最长平台 [题目考点] 1. 数组中做统计 2. 求最大值 [解题思路] 解法1:遍历并 ...

  2. 信息学奥赛一本通 1979:【18NOIP普及组】龙虎斗 | 洛谷 P5016 [NOIP2018 普及组] 龙虎斗

    [题目链接] ybt 1979: [18NOIP普及组]龙虎斗 洛谷 P5016 [NOIP2018 普及组] 龙虎斗 [题目考点] 1. long long类型使用 已知变量a, b是int类型的变 ...

  3. 信息学奥赛一本通 ybt 1933:【05NOIP普及组】循环 | 洛谷 P1050 [NOIP2005 普及组] 循环

    [题目链接] ybt 1933:[05NOIP普及组]循环 洛谷 P1050 [NOIP2005 普及组] 循环 [题目考点] 1.高精度 2.数学 [解题思路] 要求最后k位的循环长度,可以从低位向 ...

  4. 信息学奥赛一本通 1937:【06NOIP普及组】数列 | 洛谷 P1062 [NOIP2006 普及组] 数列

    [题目链接] ybt 1937:[06NOIP普及组]数列 洛谷 P1062 [NOIP2006 普及组] 数列 [题目考点] 1. 数制 [解题思路] 如果k为2,那么这个数列 第1项为202^02 ...

  5. 信息学奥赛一本通 1961:【13NOIP普及组】计数问题 | 洛谷 P1980 [NOIP2013 普及组] 计数问题

    [题目链接] ybt 1961:[13NOIP普及组]计数问题 洛谷 P1980 [NOIP2013 普及组] 计数问题 [题目考点] 1. 数字拆分 [解题思路] 遍历1~n的各个数字,对每个数字做 ...

  6. 信息学奥赛一本通 1414:【17NOIP普及组】成绩 | 洛谷 P3954 [NOIP2017 普及组] 成绩

    [题目链接] ybt 1414:[17NOIP普及组]成绩 洛谷 P3954 [NOIP2017 普及组] 成绩 [题目考点] 1. 算术表达式 2. 自动类型转换 低精度类型与高精度类型计算结果是高 ...

  7. 信息学奥赛一本通 1924:【03NOIP普及组】栈 | 洛谷 P1044 [NOIP2003 普及组] 栈

    [题目链接] ybt 1924:[03NOIP普及组]栈 洛谷 P1044 [NOIP2003 普及组] 栈 [题目考点] 递推.递归 栈 [解题思路]:一维递推 设数组a,a[i]表示i个数组成的数 ...

  8. 信息学奥赛一本通 提高篇 第六部分 数学基础 相关的真题

    第1章   快速幂 1875:[13NOIP提高组]转圈游戏 信息学奥赛一本通(C++版)在线评测系统 第2 章  素数 第 3 章  约数 第 4 章  同余问题 第 5 章  矩阵乘法 第 6 章 ...

  9. 【例1】 0/1背包《信息学奥赛一本通》【解法一】 02

    /* [例1] 0/1背包<信息学奥赛一本通>[解法一] 02 http://ybt.ssoier.cn:8088/problem_show.php?pid=1267 */ #includ ...

最新文章

  1. C和C++安全编码笔记:格式化输出
  2. 又现神论文!《本人娶刘亦菲的可行性报告》省级期刊收录
  3. 12bit的图像如何向8bit转化_【福联影像】10bit显示器比8bit专业在哪?想告别色彩断层必须要了解...
  4. 资源|最好的九张机器学习/深度学习代码速查表,附高清下载
  5. 利用抽象工厂创建DAO、利用依赖注入去除客户端对工厂的直接依赖、将有关Article的各种Servlet封装到一个Servlet中(通过BaseServlet进行
  6. boost::fusion::result_of::as_vector用法的测试程序
  7. bzoj3732-Network【Kruskal重构树模板】
  8. ASP.NET 母版页的加载顺序
  9. Android编程之仿微信显示更多文字的View
  10. 四维图新地图坐标_四维图新:自动驾驶的“高精度地图世界观”
  11. PS 色相、饱和度、明度
  12. [I T]深圳唯冠天价律师费遭起诉 补偿金由法院暂管理
  13. Codeforces 1077E Thematic Contests(二分)
  14. 小飞鱼通达二开 致远OA配置(写数据到通达OA第三方系统)接口(图文)
  15. 明日之后android和ios,明日之后互通区有哪些 明日之后ios和安卓互通区一览
  16. pdf java 开源_Java开源PDF类库 分类列表
  17. HTML 笔记/案例
  18. php批量改名工具,批量更名大师下载_批量改名大师(Win-Tool之文件批量更名工具) 1.8.7 演示版_极速下载站_软件下载...
  19. 计算机毕业设计 SSM+Vue宠物管理系统 宠物商城 宠物用品购物平台 宠物领养救助系统 Java Vue MySQL数据库 远程调试 代码讲解
  20. c++名字空间指令与名字空间声明

热门文章

  1. Sql Server之旅——第五站 确实不得不说的DBCC命令
  2. Qt5:Qt中图片的翻转,旋转,缩放,扭曲操作
  3. 新云网站管理系统最新版注入漏洞
  4. window系统下的堆栈溢出 作者:ipxodi
  5. 终于有人把「同侪效应」讲明白了
  6. 详解数据科学与数理统计的基本概念
  7. 隔离式BUCK之参数计算
  8. “既生 ExecutorService, 何生 CompletionService?”
  9. 阿里忘禅:蚂蚁集团分布式注册中心建设分享
  10. 银行大数据风控平台的建设要点与应用