贤鱼的刷题日常---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;
}

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

相关文章
|
程序员 C语言 C++
35.【C/C++ 枚举(bool)类型和宏定义 (超详细)】(二)
35.【C/C++ 枚举(bool)类型和宏定义 (超详细)】
223 0
|
计算机视觉
如何理解focal loss/GIOU(yolo改进损失函数)
如何理解focal loss/GIOU(yolo改进损失函数)
|
移动开发 算法 调度
【贪心算法】一文让你学会“贪心”(贪心算法详解及经典案例)
贪心算法是一种非常常见的算法,它的简单和高效性使其在实际应用中被广泛使用。 贪心算法的核心思想是在每一步都采取当前状态下最优的选择,而不考虑未来可能产生的影响。虽然贪心算法不能保证总是得到最优解,但在很多情况下,它可以获得很好的结果。 本篇文章将介绍贪心算法的基本概念和一些经典应用,以及如何通过贪心算法来解决一些实际问题。希望通过本文的阅读,读者可以对贪心算法有更加深刻的理解,并能够在实际问题中应用贪心算法来得到更好的解决方案。 让我们暴打贪心算法吧!
6053 0
|
11月前
|
Java Maven Spring
springboot学习一:idea社区版本创建springboot项目的三种方式(第三种为主)
这篇文章介绍了在IntelliJ IDEA社区版中创建Spring Boot项目的三种方法,特别强调了第三种方法的详细步骤。
8850 0
springboot学习一:idea社区版本创建springboot项目的三种方式(第三种为主)
|
SQL JSON 分布式计算
ODPS SQL ——列转行、行转列这回让我玩明白了!
本文详细介绍了在MaxCompute中如何使用TRANS_ARRAY和LATERAL VIEW EXPLODE函数来实现列转行的功能。
|
存储 算法 数据可视化
云上大数据分析平台:解锁数据价值,驱动智能决策新篇章
实时性与流式处理:随着实时数据分析需求的增加,云上大数据分析平台将更加注重实时性和流式处理能力的建设。通过优化计算引擎和存储架构等技术手段,平台将能够实现对数据流的高效处理和分析,为企业提供实时决策支持。通过优化计算引擎和存储架构等技术手段,平台将能够实现对数据流的高效处理和分析,为企业提供实时决策支持。
1337 8
|
存储 SQL 关系型数据库
MySQL事务日志奥秘:undo log大揭秘,一文让你彻底解锁!
【8月更文挑战第24天】本文深入探讨了MySQL中undo log的关键作用及其在确保事务原子性和一致性方面的机制。MySQL通过记录事务前的数据状态,在需要时能回滚至初始状态。主要介绍InnoDB存储引擎下的undo log实现,包括undo segment和record的结构,而MyISAM则采用redo log保障持久性而非一致性。通过一个简单的SQL回滚示例,展示了undo log如何在实际操作中发挥作用,帮助读者更好地理解并运用MySQL事务管理功能。
710 0
|
供应链 Shell Python
经济订货量(Economic Order Quantity,简称EOQ)
经济订货量(Economic Order Quantity,简称EOQ)
|
Ubuntu Python
全网最简约的Vscode配置Anaconda环境(百分百成功)
全网最简约的Vscode配置Anaconda环境(百分百成功)
28192 0
全网最简约的Vscode配置Anaconda环境(百分百成功)
|
计算机视觉 Python
OpenCV中阈值处理函数和二值化、反二值化的讲解及实战(附Python源码)
OpenCV中阈值处理函数和二值化、反二值化的讲解及实战(附Python源码)
718 0