过河卒(洛谷)

news2025/1/21 18:48:13

题目

原题

题目描述

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

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

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

输入格式

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

输出格式

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

样例 #1

样例输入 #1

6 6 3 3

样例输出 #1

6

提示

对于 100 % 100 \% 100% 的数据, 1 ≤ n , m ≤ 20 1 \le n, m \le 20 1n,m20 0 ≤ 0 \le 0 马的坐标 ≤ 20 \le 20 20

【题目来源】

NOIP 2002 普及组第四题

思路

由于题目中限定了棋子只能向下和右走,因此这大大简化了题目难度。因此dp思路基本就明确了。如果棋子想要到达点(i,j),这里只有两点可以到达,分别是(i-1,j)和(i,j-1)。因此到达(i,j)路径数等于到达(i-1,j)和(i,j-1)的路径数之和(当然还要考虑边界情况和马的控制点),以此循环就是dp思路了。
不过使用dfs的思路更简单,因此我这里使用的是记忆搜索dfs。这里的数据量比较大因此必须使用记忆dfs,否则无法通过。dfs思路和dp差不多,一个点只能向下或向右行走,以此递归最终可以达到答案。

代码

#include<bits/stdc++.h>
using namespace std;
bool flag[21][21]={0};					//禁止到达的点 
long long int ans[21][21]={0};			//记录计算过的点的路径数量 			
pair<int,int> b;						//b点位置

long long int dfs(int x,int y){
	if(ans[x][y]!=0)					//该点计算过就直接返回值
		return ans[x][y];
	if(x==b.first&&y==b.second)			//到达b点
		return 1;
	if(y+1<=20&&!flag[x][y+1]&&y+1<=b.second)	//如果向下行走不会越界且不会达到马控制点就向下行走
		ans[x][y]+=dfs(x,y+1);
	if(x+1<=20&&!flag[x+1][y]&&x+1<=b.first)	//如果向右行走不会越界且不会达到马控制点就向下行走
		ans[x][y]+=dfs(x+1,y);
	return ans[x][y];
}
int main(){
	int dx[]={-1,-1,-2,-2,1,1,2,2};
	int dy[]={-2,2,-1,1,2,-2,-1,1};
	cin>>b.first>>b.second;
	int x,y;
	cin>>x>>y;
	flag[x][y]=true;
	for(int i=0;i<8;i++){		//标记马的控制点
		if(dx[i]+x>=0&&dx[i]+x<=20&&dy[i]+y>=0&&dy[i]+y<=20)
			flag[dx[i]+x][dy[i]+y]=true;   //禁止到达的点 
	}
	cout<<dfs(0,0);				//dfs
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1446787.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

响应式编程三流处理

响应式编程三流处理 组合响应式流concatmergezipcombineLatest flatMap、concatMap、flatMapSequebtial操作符flatMapconcatMapflatMapSequential 元素采样sample 和sampleTimeout 流的批处理bufferwindow操作符group by将响应式流转化为阻塞结构在序列处理时查看元素物化和非物…

使用Python+OpenCV2进行图片中的文字分割(支持竖版)

扣字和分割 把图片中的文字&#xff0c;识别出来&#xff0c;并将每个字的图片抠出来&#xff1b; import cv2 import numpy as npHIOG 50 VIOG 3 Position []水平投影 def getHProjection(image):hProjection np.zeros(image.shape,np.uint8)# 获取图像大小(h,w)image.sh…

【Langchain Agent研究】SalesGPT项目介绍(三)

【Langchain Agent研究】SalesGPT项目介绍&#xff08;二&#xff09;-CSDN博客 上节课&#xff0c;我们介绍了salesGPT项目的初步的整体结构&#xff0c;poetry脚手架工具和里面的run.py。在run.py这个运行文件里&#xff0c;引用的最主要的类就是SalesGPT类&#xff0c;今天我…

DS Wannabe之5-AM Project: DS 30day int prep day14

Q1. What is Autoencoder? 自编码器是什么&#xff1f; 自编码器是一种特殊类型的神经网络&#xff0c;它通过无监督学习尝试复现其输入数据。它通常包含两部分&#xff1a;编码器和解码器。编码器压缩输入数据成为一个低维度的中间表示&#xff0c;解码器则从这个中间表示重…

P1164 小A点菜题解

题目 uim拿到了uoi的镭牌后&#xff0c;立刻拉着基友小A到了一家餐馆&#xff0c;很低端的那种。uim指着墙上的价目表&#xff08;太低级了没有菜单&#xff09;&#xff0c;说&#xff1a;“随便点”。 不过uim由于买了一些书&#xff0c;口袋里只剩M元(M≤10000)。 餐馆虽…

算法村目录

大家好我是苏麟 , 这是算法村使用目录 . 算法通关村 从链表到动态规划的实战 目录 算法村开篇第一关 了解链表第二关 链表专题第三关 数组专题第四关 栈专题第五关 队列专题第六关 树专题第七关 二叉树遍历专题第八关 二叉树专题第九关 二分查找与二叉树专题第十关 快速排序与归…

Java学习18-- Override方法重写【★】

重点&#xff1a;super类 & 方法重写 ★看不明白多看几遍&#xff0c;记住static优先级>>高于override 重写Override methods★ 重写Override&#xff1a;child class可以覆盖father class中的method&#xff0c;即子类child class和父类father class有相同名称、…

extern 使用头文件

画红线的那个 很重要 详细解释之后写 全局变量定义在头文件&#xff0c;然后如果很多c文件通过include包含这个头文件&#xff0c;那么因为include是在预编译阶段&#xff0c;直接把这个头文件里面的东西解出来&#xff0c;然后插入在这个c文件&#xff0c;那么如果有很多个c文…

mysql数据库concat指定连接符号

SELECT CONCAT_WS(;;;, 你好,华为) FROM DUAL;

【算法随想录01】环形链表

题目&#xff1a;141. 环形链表 难度&#xff1a;EASY 代码 哈希表遍历求解&#xff0c;表中存储的是元素地址。 时间复杂度 O ( N ) O(N) O(N)&#xff0c;空间复杂度 O ( N ) O(N) O(N) /*** Definition for singly-linked list.* struct ListNode {* int val;* …

iTop-4412 裸机程序(十九)- 按键中断

目录 0.源码1.异常向量表1.1 原理1.2 异常种类1.3 ARMv7 规定的异常向量表 2. 中断2.1 iTop-4412 中使用的中断相关寄存器 上篇博文介绍了按键的轮询处理方式&#xff0c;本篇介绍按键的中断方式。 0.源码 GitHub&#xff1a;https://github.com/Kilento/4412NoOS 1.异常向量…

《Java 简易速速上手小册》第4章:Java 中的异常处理(2024 最新版)

文章目录 4.1 异常类型和错误 - 遇见你的小怪兽4.1.1 基础知识4.1.2 重点案例&#xff1a;文件读取处理4.1.3 拓展案例 1&#xff1a;处理空指针异常4.1.4 拓展案例 2&#xff1a;捕获多个异常 4.2 异常处理机制 - 穿上你的超级英雄斗篷4.2.1 基础知识4.2.2 重点案例&#xff1…

SpringCloud-Feign:负载均衡(基于服务端)

7.Feign&#xff1a;负载均衡(基于服务端) 7.1 Feign简介 Feign是一个开源的声明式HTTP客户端&#xff0c;它可以简化HTTP API的调用过程。Feign的设计目标是使得使用者可以像调用本地方法一样调用远程服务&#xff0c;使得编写和维护HTTP客户端变得更加简单。类似controller…

2016-2022年哨兵影像的在线底图

有一个欧洲初创公司对哨兵影像进行了去云处理&#xff0c;制作了一个2016年-2022年的全球哨兵底图。目前底图通过wmts发布&#xff0c;可免费使用&#xff0c;无需搭梯子。 该数据的特点是&#xff1a; 很少的云覆盖&#xff0c;较少的条纹&#xff0c;色彩平衡 底图切片的网…

推荐高端资源素材图库下载平台整站源码

推荐高端图库素材下载站的响应式模板和完整的整站源码&#xff0c;适用于娱乐网资源网。该模板支持移动端&#xff0c;并集成了支付宝接口。 演示地 址 &#xff1a; runruncode.com/tupiao/19692.html 页面设计精美&#xff0c;不亚于大型网站的美工水准&#xff0c;并且用户…

如何对研究成果进行有效的专利布局

一、背景 研究成果通常是研究者、学者或创新者智力劳动的产物&#xff0c;如专利技术、设计、算法、新药物、研究方法等。通过专利申请、版权法、商标法、商业秘密等方式对其进行法律保护&#xff0c;确保研究者拥有对其成果的专有权&#xff0c;可以独享经济利益和控制权。 …

[LeetCode周赛复盘] 第 384 场周赛20240211

[LeetCode周赛复盘] 第 384 场周赛20240211 一、本周周赛总结100230. 修改矩阵1. 题目描述2. 思路分析3. 代码实现 100219. 回文字符串的最大数量1. 题目描述2. 思路分析3. 代码实现 100198. 匹配模式数组的子数组数目 II1. 题目描述2. 思路分析3. 代码实现 参考链接 一、本周…

GPT4:你是故意的吧!

请问下面选项中哪个是中文&#xff1f; A.Chinese B.英文 这是一个关于语言识别的问题。我们需要分析并确定所给选项中哪个表示中文。 对于选项A.Chinese&#xff1a;这个词本身表示“中文”或“中国的”。在多种语境中&#xff0c;它经常被用来指代中国的语言&#xff0c;即中…

京东组件移动端库的使用 Nut-UI

1.介绍 NutUI NutUI-Vue 组件库&#xff0c;基于 Taro&#xff0c;使用 Vue 技术栈开发小程序应用&#xff0c;开箱即用&#xff0c;帮助研发快速开发用户界面&#xff0c;提升开发效率&#xff0c;改善开发体验。 特性 &#x1f680; 80 高质量组件&#xff0c;覆盖移动端主…

Spring Boot 笔记 007 创建接口_登录

1.1 登录接口需求 1.2 JWT令牌 1.2.1 JWT原理 1.2.2 引入JWT坐标 1.2.3 单元测试 1.2.3.1 引入springboot单元测试坐标 1.2.3.2 在单元测试文件夹中创建测试类 1.2.3.3 运行测试类中的生成和解析方法 package com.geji;import com.auth0.jwt.JWT; import com.auth0.jwt.JWTV…