P1002 [NOIP2002 普及组] 过河卒

2023-05-16

题目描述

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

棋盘用坐标表示,A 点 (0, 0)、B 点 (n,m),同样马的位置坐标是需要给出的。

在这里插入图片描述

现在要求你计算出卒从 A 点能够到达 B 点的路径的条数,假设马的位置是固定不动的,并不是卒走一步马走一步。

输入格式

一行四个正整数,分别表示 B 点坐标和马的坐标。

输出格式

一个整数,表示所有的路径条数。

输入输出样例

输入
6 6 3 3
输出
6
在这里插入图片描述
方法:动态规划
递归式: a[i][j] = a[i - 1][j] + a[i][j - 1];

#include <iostream>
#include <cstring>

#define max 1000

using namespace std;

int main()
{
    int bx, by, cx, cy;
    cin >> bx >> by >> cx >> cy;
    long long a[max][max];              //long long 数据超出int
    int cony[8] = {-2, -1, 1, 2, 2, 1, -1, -2};		//计算控制点
    int conx[8] = {-1, -2, -2, -1, 1, 2, 2, 1};
    int isControl[max][max];  // 标记是不是马的控制点
    memset(isControl, 0, sizeof(isControl));
    isControl[cx][cy] = 1;
    
    for (int i = 0; i <= 7; ++i)			//计算控制点,是的话标记点为1
    {
        if (cx + conx[i] >= 0 && cx + conx[i] <= bx && cy + cony[i] >= 0 && cy + cony[i] <= by)
        {
            isControl[cx + conx[i]][cy + cony[i]] = 1;
        }
    }

    int i = 0;					//初始化边界
    while (!isControl[i][0] && i <= bx)
    {
        a[i++][0] = 1;
    }
    i = 0;
    while (!isControl[0][i] && i <= by)
    {
        a[0][i++] = 1;
    }

    for (i = 1; i <= bx; ++i)			//dp计算
    {
        for (int j = 1; j <= by; ++j)
        {
            if (isControl[i][j])
                a[i][j] = 0;
            else
            {
                a[i][j] = a[i - 1][j] + a[i][j - 1];
            }
        }
    }
    cout << a[bx][by]<<endl;
    return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • Python dataframe更换列名称

    方法1 使用pd rename函数 span class hljs operator a span span class hljs built in rename span columns 61 span class hljs string
  • 知识点2:Swift REPL

    关于REPL简介 REPL xff1a 英文缩写 xff08 Read Eval Print Loop xff09 即读取 执行 输出 循环的意思 Xcode 6 1 引入了另一种以交互式的方式体验Sw ift的方法 主要特点 xff1a
  • iOS 关于UIAlertController常见使用方法

    Step 1 警告框 1 代码 1 创建提示窗口 参数1 xff1b Title xff1a 标题 参数1 xff1b message xff1a 提示内容 参数1 xff1b Style 风格 UIAlertControllerStyle
  • 2023年最新版kali linux安装教程

    一 前期准备 前排提醒 xff0c 文末有绿色版安装包免费领取 xff01 二 VMware虚拟机配置 1 打开vmware xff0c 点击创建新的虚拟机 2 选择自定义 高级 选项 xff0c 点击下一步 3 继续下一步 4 选择 稍后
  • CentOS7.1下 安装vncserver和删除vnc占有的端口

    今天给两台新服务器装CentOs7 1系统 xff0c 然后装VNCServer的时候感觉网上的教程要么复杂多此一举 xff0c 要么不清楚 xff0c 关于 list端口的部分都没讲 所以这里整理一下 xff0c 按着下面的顺序来就可以了
  • mac使用虚拟机(VirtualBox+centos7)搭建kubernetes(K8S)集群

    文章目录 说明一 环境准备1 配置主机网络2 配置磁盘空间3 安装虚拟机配置网络4 设置Linux环境 三台均需要设置 二 安装docker kubeadm kubelet kubectl 三台均需要设置 1 安装docker环境2 kub
  • .NET6入门:1.Windows开发环境搭建

    作为 NET的最新版本 NET6长期支持版已经发布 xff0c NET6宣称是迄今为止最快的 NET 那当然不能落下时代的潮流 xff0c 就让我们跟着文章进入 NET6的世界吧 1 NET6SDK下载 Download NET Linux
  • 音视频编解码原理(一) 封装格式和编码方式简介

    一 封装格式 要了解音视频编解码原理 xff0c 首先需要知道什么是封装格式 xff1f 所谓封装格式 xff0c 就是将已经编码压缩好的视频轨和音频轨按照一定的格式封装到一个文件中 xff0c 一般情况下 xff0c 不同的封装格式对应不
  • VS调试方法总结(二)

    通过结构化异常定位崩溃程序 程序崩溃时 xff0c 生成文本文件 xff0c 记录崩溃得堆栈信息 直接上代码 已经编译通过 xff0c 拷贝直接可用 h include lt Windows h gt include lt stdarg h
  • QT(C++) + OpenCV + Python库打包发布可执行EXE

    QT xff08 C 43 43 xff09 43 OpenCV 43 Python库打包发布可执行EXE 背景 最近写了一个操作界面 xff0c 不仅用到了OpenCV的函数 xff0c 还调用了一个python脚本 xff0c 所以这里
  • Linux 内存管理 页回收和swap机制

    页高速缓存和页写回机制 页是物理内存或虚拟内存中一组连续的线性地址 xff0c Linux内核以页为单位处理内存 xff0c 页的大小通常是4KB 当一个进程请求一定量的页面时 xff0c 如果有可用的页面 xff0c 内核会直接把这些页面
  • docker 创建 network,出现异常问题及解决

    最近在使用 docker 创建 network 时 xff0c 出现错误 xff1a Error response from daemon could not find plugin bridge in v1 plugin registry
  • 工作进度所占总进度的比例

    如果实现的功能模块全部完成为 或者说 工作进度 xff1a 100 那么 xff1a 1 产品原型全部完成 包括文档的整理 xff1a 15 2 UI设计全部完成 xff1a 10 3 后台全部完成 xff1a 25 4 前台全部完成 xf
  • Docx4J替换内容时,内容换行失败问题解决

    WordprocessingMLPackage wordMLPackage 61 WordprocessingMLPackage load new java io File templatePath MainDocumentPart doc

随机推荐

  • C语言经典例题-用4×4矩阵显示从1到16的所有整数,并计算每行、每列和每条对角线上的和

    编写一个程序 xff0c 要求用户 按任意次序 xff09 输入从1到16的所有整数 xff0c 然后用4 4矩阵的形式将它们显示出来 再计算出每行 每列和每条对角线上的和 include lt stdio h gt int main in
  • java中Map.hashCode()函数说明

    在java中 xff0c Map hashCode 函数是在具有一定工作积累后 xff0c 为了更好的成长不可避免需要研究的内容 首先 xff0c 我们先看下原始代码 xff1a static final int hash Object k
  • 不支持的特性: getMetaData,问题解决

    最近使用springboot 43 mybatis 时遇到 xff1a 不支持的特性 getMetaData 的异常 使用 xff1a 64 Options useGeneratedKeys 61 false 解决的该问题 xff1b 官方
  • jsp四种范围

    page代表是与一个页面相关的对象和属性 request代表是与 Web 客户机发出一个请求相关的对象和属性 session代表是与用于某个 Web 客户机的一个用户体验相关的对象和属性 application代表是与整个 Web 应用程序
  • Kotlin-17-等号比较(== 、===)

    目录 1 Java中的 61 61 2 Java中的 equals 3 两者的区别 3 对于基本数据类型的 61 61 比较 4 Kotlin中的 61 61 与 61 61 61 1 Java中的 61 61 Java中的 61 61 直
  • Kotlin-30-继承多个父类

    目录 1 Java中的继承 2 Kotlin中的继承 1 Java中的继承 Java中的类只能继承一个父类 xff0c 是无法实现继承多个父类 xff0c 但是一个类可以实现多个接口 Java中的接口是无法给函数添加函数体的 abstrac
  • 算法-9-快速排序

    目录 1 描述 2 特点 3 代码实现 3 1 切分函数partition 图示 4 性能 5 快速排序优化 xff08 小数组插入排序 xff09 6 快排优化 xff08 三向切分 xff09 1 描述 快速排序也是基于递归实现的 和归
  • Kotlin进阶-6-重入锁+synchronized+volatile

    目录 1 介绍 2 线程的状态 3 创建线程 4 线程同步 4 1 可重入锁 4 2 不可重入锁的实现 4 3 可重入锁的实现 4 4 Java中的可重入锁 ReentrantLock 4 5 同步方法 synchronized 5 vol
  • Kotlin进阶-7-阻塞队列+线程池

    目录 1 阻塞队列 1 1 常见阻塞场景 2 Java中的阻塞队列 2 1 ArrayBlockingQueue 2 2 LinkedBlockingQueue 2 3 PriorityBlockingQueue 2 4 DelayQueu
  • Kotlin进阶-11-Activity启动后的视图加载分析

    1 介绍 Kotlin进阶 9 setContentView源析 43 Window Activity DecorView关系 Kotlin进阶 10 Activity的启动流程 前面两节分别介绍了Activity的启动流程 xff0c 还
  • Java多线程编程技术总结

    目录 1 退出线程的3种方式 xff1a 1 1 判断线程是否中断 xff1f 1 2 interrupt 1 3 stop 1 4 StackTraceElement getStackTrace 方法 2 suspend 和resume
  • 【Mysql】视图

    Mysql 视图 1 什么是视图 xff08 MySQL 5以及以上版本 xff09 2 视图的优点3 视图的规则与限制4 使用视图附录 1 什么是视图 xff08 MySQL 5以及以上版本 xff09 视图是虚拟的表 与包含数据的表不一
  • AIDL的原理实现

    前言 Binder 驱动是基于 CS 模型设计的跨进程通信驱动 想要使用 Binder 驱动进行通信 需要三个步骤 定义交互规范服务端实现客户端实现 一 定义交互规范 span class token keyword public span
  • 微信小程序9---Button按钮和icon图标

    Button 按钮 首先提醒一下大家 xff0c 如果你现在button标签不能用 xff0c 不用担心 xff0c 那是因为微信小程序存在一个bug xff0c 你仔细看一下你的button标签的代码是不是这样的 span class h
  • 微信小程序10---条件语句if和循环语句for(三目运算+hidden)

    在微信小程序的官方文档中 xff0c 将这两个语句归化在框架的视图层 xff0c 分表叫条件渲染和类表渲染 xff0c 其实他就是封装了这两条语句而已 上图 xff08 循环语句if xff09 1 它是通过在index js中设置数据 x
  • 微信小程序13--通过api接口将json数据展现到小程序上

    实现知乎客户端的一个重要知识前提就是 xff0c 要知道怎么通过知乎新闻的接口 xff0c 来把数据展示到微信小程序端上 那么我们这一就先学习一下 xff0c 如何将接口获取到的数据展示到微信小程序上 1 用到的知识点 lt 1 gt wx
  • 微信小程序15---将组件设置为圆形

    1 上图 2 index wxss 宽高和弧度的设置 span class hljs class circle span span class hljs rules span class hljs rule span class hljs
  • Android---给Linearlayout设置边框+弧度角

    1 第一步需要在drawable下创建一个xml文件 xff0c 代码如下 span class hljs pi lt xml version 61 34 1 0 34 encoding 61 34 utf 8 34 gt span spa
  • HttpServletRequest获取body && 使用 @RequestBody 获取body

    直接从HttpServletRequest的Reader流中获取请求body参数 span class token annotation punctuation 64 RequestMapping span span class token
  • P1002 [NOIP2002 普及组] 过河卒

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