贤鱼的刷题日常---P1002 [NOIP2002 普及组] 过河卒---详细题解

简介: 🍀理解,学会过河卒题目
🏆今日学习目标:
🍀理解,学会过河卒题目
✅创作者:贤鱼

请添加图片描述

题目

棋盘上 A 点有一个过河卒,需要走到目标 B 点。卒行走的规则:可以向下、或者向右。同时在棋盘上 C 点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点。因此称之为“马拦过河卒”。
棋盘用坐标表示,A 点 (0, 0)、B 点 (n, m),同样马的位置坐标是需要给出的。
现在要求你计算出卒从 A 点能够到达 B 点的路径的条数,假设马的位置是固定不动的,并不是卒走一步马走一步。
输入格式
一行四个正整数,分别表示B 点坐标和马的坐标。
输出格式
一个整数,表示所有的路径条数。
输入输出样例
输入 #1复制
6 6 3 3
输出 #1复制
6
说明/提示
对于 100% 的数据1≤n,m≤20,0≤ 马的坐标 ≤20。

思路

对于这道题,我们==首先可以算出来马的八个移动点的范围==,将他们设为1,这样子就处理好了马。,然后就是一个简单的dp题了,题目中说了,人只能==向下或者向右==,所以==visi=visi-1+visi==,下面来看看代码

AC代码

#include<cmath>
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
long mapp[1001][1001];
long vis[1001][1001];
long x,y,xx,yy;//记得开longlong
long n,m;
long ans=0;
int main(){
    cin>>x>>y>>xx>>yy;
    n=x,m=y;
    mapp[xx][yy]=1;
    if(xx > 1 && yy != 0)   mapp[xx - 2][yy - 1] = 1;
    if(xx < 19 && yy != 0)  mapp[xx + 2][yy - 1] = 1;
    if(xx > 1 && yy != 20)  mapp[xx - 2][yy + 1] = 1;
    if(xx < 19 && yy != 20) mapp[xx + 2][yy + 1] = 1;
    if(xx != 0 && yy > 1)   mapp[xx - 1][yy - 2] = 1;
    if(xx != 0 && yy < 19)  mapp[xx - 1][yy + 2] = 1;
    if(xx != 20 && yy > 1)  mapp[xx + 1][yy - 2] = 1;
    if(xx != 20 && yy < 19) mapp[xx + 1][yy + 2] = 1;    //这里都要判断一下这个点是否需要修改
    for(int i=0;i<=x;i++){
        for(int j=0;j<=y;j++){
            if(mapp[i][j]!=1){
                if(i==0&&j==0) vis[i][j]=1;//这里不在数组外赋值是应为vis[-1][0],vis[0][-1]不知道是啥,在里头赋值就可以避免这个问题
                else if(i==0&&j>0) vis[0][j]=vis[0][j-1];
                else if(i>1&&j==0) vis[i][0]=vis[i-1][0];//判断边界
                else vis[i][j]=vis[i-1][j]+vis[i][j-1];
            }
        }
    }
    cout<<vis[x][y];
    return 0;
}

==如果喜欢的话,可以关注一下专栏奥,持续更新的!==
请添加图片描述

相关文章
|
3月前
|
Web App开发 人工智能 自然语言处理
快速掌握Dify+Chrome MCP:打造网页操控AI助手
本文教你如何快速搭建一个能操作浏览器的AI助手:通过Dify和Chrome MCP结合,只需三步配置,即可实现自动填表、数据抓取和网页操控,无需编写代码,用自然语言就能指挥AI完成各类网页任务。
|
存储
【洛谷 P1255】数楼梯 题解(递归+记忆化搜索+高精度)
这是一个使用动态规划解决的“数楼梯”问题。给定楼梯数`N`,求不同上楼方式的数量。程序通过递归函数`f()`计算,其中`f(x) = f(x - 1) + f(x - 2)`,初始条件`f(1) = 1`,`f(2) = 2`。考虑到数据规模可能很大,使用了高精度加法运算。样例输入`4`,输出`5`。代码中定义了一个存储中间结果的向量`mem`,并提供了一个用于显示高精度数的`printv()`函数。
336 0
|
3月前
|
Web App开发 人工智能 前端开发
产品发布策略:如何让Chrome插件在竞争激烈的市场中脱颖而出
Chrome Web Store每天新增很多个插件。插件刚发布,用户只有我自己,如何在这样的红海市场中找到自己的位置,是我一直在思考的问题。
154 0
|
8月前
|
数据采集 人工智能 Java
使用 Ollama 本地模型与 Spring AI Alibaba 的强强结合,打造下一代 RAG 应用
使用 Ollama 本地模型与 Spring AI Alibaba 的强强结合,打造下一代 RAG 应用
1889 22
|
存储 算法 Java
【DFS(深度优先搜索)详解】看这一篇就够啦
本文介绍了深度优先搜索(DFS)算法及其应用。DFS从某个顶点出发,深入探索图的每条路径,直到无法前进为止,然后回溯。文章详细解释了DFS的基本思想,并通过示例图展示了其执行过程。此外,文中还探讨了三种枚举方式:指数型枚举、排列型枚举和组合型枚举,并提供了具体的代码实现。最后,文章通过几道练习题帮助读者更好地理解和应用DFS算法。
10504 19
【DFS(深度优先搜索)详解】看这一篇就够啦
|
Java Maven Spring
springboot学习一:idea社区版本创建springboot项目的三种方式(第三种为主)
这篇文章介绍了在IntelliJ IDEA社区版中创建Spring Boot项目的三种方法,特别强调了第三种方法的详细步骤。
11655 0
springboot学习一:idea社区版本创建springboot项目的三种方式(第三种为主)
|
运维 前端开发 关系型数据库
高效调试与分析:利用ftrace进行Linux内核追踪(上)
高效调试与分析:利用ftrace进行Linux内核追踪
|
Ubuntu Python
全网最简约的Vscode配置Anaconda环境(百分百成功)
全网最简约的Vscode配置Anaconda环境(百分百成功)
32237 0
全网最简约的Vscode配置Anaconda环境(百分百成功)
|
机器学习/深度学习 人工智能 算法
【深度学习前沿应用】图像风格迁移
【深度学习前沿应用】图像风格迁移,基于百度飞桨开发,参考于《机器学习实践》所作。
1172 1
【深度学习前沿应用】图像风格迁移
|
消息中间件 存储 Kafka
【Kafka】Kafka 的日志保留期与数据清理策略
【4月更文挑战第13天】【Kafka】Kafka 的日志保留期与数据清理策略