一个经典的递推题

递推不会的看下面:

https://www.cnblogs.com/haoningdeboke-2022/p/16247055.html

俗话输得好 马走日

所以先写出马可以走到的地方

 
1 const int fx[] = {0, -2, -1, 1, 2, 2, 1, -1, -2};
2 const int fy[] = {0, 1, 2, 2, 1, -1, -2, -2, -1};

然后标记马走过的地方:

     1 for(int i = 1; i <= 8; i++) s[mx + fx[i]][my + fy[i]] = 1;
但要防止越界,所以坐标+2以防越界:
 1 bx += 2; by += 2; mx += 2; my += 2; 
最关键的代码:
for(int i = 2; i <= bx; i++){
for(int j = 2; j <= by; j++){
if(s[i][j]) continue; // 如果被马拦住就直接跳过
f[i][j] = f[i - 1][j] + f[i][j - 1];
//递推 因为可以从左边的点和上边的点走过来所以 左边的点+上边的点

}
}
完整代码:
 1 #include<iostream>
2 #include<cstring>
3 #include<cstdio>
4 #include<algorithm>
5 #define ll long long
6 using namespace std;
7
8 const int fx[] = {0, -2, -1, 1, 2, 2, 1, -1, -2};
9 const int fy[] = {0, 1, 2, 2, 1, -1, -2, -2, -1};
10 //马可以走到的位置
11
12 int bx, by, mx, my;
13 ll f[40][40];
14 bool s[40][40]; //判断这个点有没有马拦住
15 int main(){
16 scanf("%d%d%d%d", &bx, &by, &mx, &my);
17 bx += 2; by += 2; mx += 2; my += 2;
18 //坐标+2以防越界
19 f[2][1] = 1;//初始化
20 s[mx][my] = 1;//标记马的位置
21 for(int i = 1; i <= 8; i++) s[mx + fx[i]][my + fy[i]] = 1;
22 for(int i = 2; i <= bx; i++){
23 for(int j = 2; j <= by; j++){
24 if(s[i][j]) continue; // 如果被马拦住就直接跳过
25 f[i][j] = f[i - 1][j] + f[i][j - 1];
26 //状态转移方程
27 }
28 }
29 printf("%lld\n", f[bx][by]);
30 return 0;
31 }


P1002 [NOIP2002 普及组] 过河卒的更多相关文章

  1. noip2002 普及组 过河卒

    题目描述 棋盘上A点有一个过河卒,需要走到目标B点.卒行走的规则:可以向下.或者向右.同时在棋盘上C点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点.因此称之为"马拦过 ...

  2. [NOIP2002] 普及组

    产生数 预处理出一个数能变成多少种数,然后遍历原串的每一位,累乘方案数即可. 需要用到高精度. /*By SilverN*/ #include<iostream> #include< ...

  3. NOIP2002普及组复赛B 选数

    题目链接:https://ac.nowcoder.com/acm/contest/230/B 题目大意: 略 分析: DFS模板题. 代码如下: #include <bits/stdc++.h& ...

  4. 题解 【洛谷P1035】[NOIP2002普及组]级数求和

    [NOIP2002普及组]级数求和 这个题……用循环也是可以的,不过我写了两种循环的题解,供各位dalao参考!O(∩_∩)O谢谢! for循环版本: #include<bits/stdc++. ...

  5. C++算法代码——级数求和[NOIP2002 普及组]

    题目来自:http://218.5.5.242:9018/JudgeOnline/problem.php?id=1078 或者:https://www.luogu.com.cn/problem/P10 ...

  6. 洛谷P1036 [NOIP2002 普及组] 选数 (搜索)

    n个数中选取k个数,判断这k个数的和是否为质数. 在dfs函数中的状态有:选了几个数,选的数的和,上一个选的数的位置: 试除法判断素数即可: 1 #include<bits/stdc++.h&g ...

  7. Codevs 1010 过河卒 2002年NOIP全国联赛普及组

    1010 过河卒 2002年NOIP全国联赛普及组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 传送门 题目描述 Description 如图,A 点有一个过河卒 ...

  8. 1010 过河卒 2002年NOIP全国联赛普及组codevs

    1010 过河卒  2002年NOIP全国联赛普及组codevs 题目描述 Description 如图,A 点有一个过河卒,需要走到目标 B 点.卒行走规则:可以向下.或者向右.同时在棋盘上的任一点 ...

  9. 洛谷 P1002 过河卒 【棋盘dp】

    题目链接:https://www.luogu.org/problemnew/show/P1002 题目描述 棋盘上A点有一个过河卒,需要走到目标B点.卒行走的规则:可以向下.或者向右.同时在棋盘上C点 ...

  10. 洛谷[P1002]过河卒

    原题地址:https://www.luogu.org/problemnew/show/P1002 题目描述 棋盘上A点有一个过河卒,需要走到目标B点.卒行走的规则:可以向下.或者向右.同时在棋盘上C点 ...

随机推荐

  1. [C++]vector内存的增长机制

    例子 #include <iostream> #include<vector> #include<algorithm> #include "CPPDemo ...

  2. wkhtmltopdf 目录对象使用 及 目录样式分享

    最近又是更新了报告模板的样式新使用了目录对象 因为直接生成的目录样式比较丑所以这边使用的是自定义xsl 直接生成的目录样式 自定义样式 因为需求所以写了些特殊判断 <xsl:if test=&q ...

  3. 快速实现一个简单阉割版的HashMap

    简单实现一个底层数据结构为数组 + 链表的HashMap,不考虑链表长度超过8个时变为红黑树的情况. 1.示例图 2.分析需求 put数据时: key值hash后的索引处没有元素,需要创建链表头节点, ...

  4. BIGO 如何做到夜间同时运行 2.4K 个工作流实例?

    点亮 ️ Star · 照亮开源之路 GitHub:https://github.com/apache/dolphinscheduler   ​ 精彩回顾 近期,BIGO 的大数据研发工程师许名勇在社 ...

  5. 编写antd的Cascader 级联选择组件市级地区数据

    下面是该组件的使用数据的格式 options: [ { value: 'zhejiang', label: 'Zhejiang', children: [ { value: 'hangzhou', l ...

  6. 20个 Git 命令玩转版本控制

    想要在团队中处理代码时有效协作并跟踪更改,版本控制发挥着至关重要的作用.Git 是一个版本控制系统,可以帮助开发人员跟踪修订.识别文件版本,并在必要的时候恢复旧版本.Git 对于有一定编程经验的用户来 ...

  7. ElasticSearch使用教程

    一.ElasticSearch使用说明 1. 索引 index,相当于数据库表Table 1.1 查看所有索引 GET _cat/indices?v 1.2 创建索引字段映射关系 PUT /test ...

  8. 安装和配置Java开发环境JDK

    我们通常软件开发的操作系统选择Windows,生产环境选择linux或windows Server.移动开发可能是安卓或IOS和鸿蒙系统等. Windows下一般选择的是64位的操作系统,一般建议CP ...

  9. 1.初识 Django

    设计模式 定义 # mysite/news/models.py from django.db import models class Reporter(models.Model): full_name ...

  10. Xlight安装与使用

    Xlight安装与使用 一.Xlight安装 下载Xlight安装包,点击安装,默认就可以,下一步 点击左上角增加虚拟服务器,IP地址为本机服务器IP地址 右键点击新添加的虚拟服务器,点击虚拟服务器操 ...