信息学奥赛一本通 1314:【例3.6】过河卒(Noip2002) | 1921:【02NOIP普及组】过河卒 | 洛谷 P1002 [NOIP2002 普及组] 过河卒
【题目链接】
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 普及组] 过河卒相关推荐
- 信息学奥赛一本通 1116:最长平台 | OpenJudge NOI 1.9 12:最长平台 | 洛谷 B2097 最长平台
[题目链接] ybt 1116:最长平台 OpenJudge NOI 1.9 12:最长平台 洛谷 B2097 最长平台 [题目考点] 1. 数组中做统计 2. 求最大值 [解题思路] 解法1:遍历并 ...
- 信息学奥赛一本通 1979:【18NOIP普及组】龙虎斗 | 洛谷 P5016 [NOIP2018 普及组] 龙虎斗
[题目链接] ybt 1979: [18NOIP普及组]龙虎斗 洛谷 P5016 [NOIP2018 普及组] 龙虎斗 [题目考点] 1. long long类型使用 已知变量a, b是int类型的变 ...
- 信息学奥赛一本通 ybt 1933:【05NOIP普及组】循环 | 洛谷 P1050 [NOIP2005 普及组] 循环
[题目链接] ybt 1933:[05NOIP普及组]循环 洛谷 P1050 [NOIP2005 普及组] 循环 [题目考点] 1.高精度 2.数学 [解题思路] 要求最后k位的循环长度,可以从低位向 ...
- 信息学奥赛一本通 1937:【06NOIP普及组】数列 | 洛谷 P1062 [NOIP2006 普及组] 数列
[题目链接] ybt 1937:[06NOIP普及组]数列 洛谷 P1062 [NOIP2006 普及组] 数列 [题目考点] 1. 数制 [解题思路] 如果k为2,那么这个数列 第1项为202^02 ...
- 信息学奥赛一本通 1961:【13NOIP普及组】计数问题 | 洛谷 P1980 [NOIP2013 普及组] 计数问题
[题目链接] ybt 1961:[13NOIP普及组]计数问题 洛谷 P1980 [NOIP2013 普及组] 计数问题 [题目考点] 1. 数字拆分 [解题思路] 遍历1~n的各个数字,对每个数字做 ...
- 信息学奥赛一本通 1414:【17NOIP普及组】成绩 | 洛谷 P3954 [NOIP2017 普及组] 成绩
[题目链接] ybt 1414:[17NOIP普及组]成绩 洛谷 P3954 [NOIP2017 普及组] 成绩 [题目考点] 1. 算术表达式 2. 自动类型转换 低精度类型与高精度类型计算结果是高 ...
- 信息学奥赛一本通 1924:【03NOIP普及组】栈 | 洛谷 P1044 [NOIP2003 普及组] 栈
[题目链接] ybt 1924:[03NOIP普及组]栈 洛谷 P1044 [NOIP2003 普及组] 栈 [题目考点] 递推.递归 栈 [解题思路]:一维递推 设数组a,a[i]表示i个数组成的数 ...
- 信息学奥赛一本通 提高篇 第六部分 数学基础 相关的真题
第1章 快速幂 1875:[13NOIP提高组]转圈游戏 信息学奥赛一本通(C++版)在线评测系统 第2 章 素数 第 3 章 约数 第 4 章 同余问题 第 5 章 矩阵乘法 第 6 章 ...
- 【例1】 0/1背包《信息学奥赛一本通》【解法一】 02
/* [例1] 0/1背包<信息学奥赛一本通>[解法一] 02 http://ybt.ssoier.cn:8088/problem_show.php?pid=1267 */ #includ ...
最新文章
- C和C++安全编码笔记:格式化输出
- 又现神论文!《本人娶刘亦菲的可行性报告》省级期刊收录
- 12bit的图像如何向8bit转化_【福联影像】10bit显示器比8bit专业在哪?想告别色彩断层必须要了解...
- 资源|最好的九张机器学习/深度学习代码速查表,附高清下载
- 利用抽象工厂创建DAO、利用依赖注入去除客户端对工厂的直接依赖、将有关Article的各种Servlet封装到一个Servlet中(通过BaseServlet进行
- boost::fusion::result_of::as_vector用法的测试程序
- bzoj3732-Network【Kruskal重构树模板】
- ASP.NET 母版页的加载顺序
- Android编程之仿微信显示更多文字的View
- 四维图新地图坐标_四维图新:自动驾驶的“高精度地图世界观”
- PS 色相、饱和度、明度
- [I T]深圳唯冠天价律师费遭起诉 补偿金由法院暂管理
- Codeforces 1077E Thematic Contests(二分)
- 小飞鱼通达二开 致远OA配置(写数据到通达OA第三方系统)接口(图文)
- 明日之后android和ios,明日之后互通区有哪些 明日之后ios和安卓互通区一览
- pdf java 开源_Java开源PDF类库 分类列表
- HTML 笔记/案例
- php批量改名工具,批量更名大师下载_批量改名大师(Win-Tool之文件批量更名工具) 1.8.7 演示版_极速下载站_软件下载...
- 计算机毕业设计 SSM+Vue宠物管理系统 宠物商城 宠物用品购物平台 宠物领养救助系统 Java Vue MySQL数据库 远程调试 代码讲解
- c++名字空间指令与名字空间声明