首页 > 试题广场 >

[NOIP2002 普及组] 过河卒

[编程题][NOIP2002 普及组] 过河卒
  • 热度指数:4429 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解

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

棋盘用坐标表示,A 点 (0, 0)、B点(n,m),同样马的位置坐标是需要给出的。
现在要求你计算出卒从 A点能够到达 B点的路径的条数,假设马的位置(x,y)是固定不动的,并不是卒走一步马走一步。

注:马一次跳跃到达的点(x1,y1)和马原坐标(x,y)的关系是 


数据范围: ,马的坐标 


输入描述:
仅一行,输入 n,m,x,y 四个正整数。分别表示B点坐标和马的坐标


输出描述:
输出路径总数
示例1

输入

6 6 3 3

输出

6
示例2

输入

5 4 2 3

输出

3
示例3

输入

2 5 3 5

输出

1
头像 静寂旮旯
发表于 2022-04-13 14:03:33
解题思路: 利用二维数组dp 卒子只能两个方向走,一个是向右,一个是向下。可得状态方程dp[i][j]=dp[i−1][j]+dp[i][j−1]dp[i][j] = dp[i-1][j] + dp[i][j-1]dp[i][j]=dp[i−1][j]+dp[i][j−1]。 在处理马点的时候,应 展开全文
头像 充电中...
发表于 2022-06-30 15:37:53
都没有人用C写,那我写一个 #include <stdio.h> int fun(int x,int y,int n,int m); int main(){     int n = 0,m = 0,x = 0,y = 0;     sc 展开全文
头像 吱吱1111111
发表于 2024-04-17 04:31:31
#include <iostream> #include <vector> using namespace std; struct point{ int x; int y; point(int a=0,int b=0):x(a),y(b){} }; 展开全文
头像 -含章可贞-
发表于 2022-05-16 11:41:05
n,m,x,y=map(int,input().split()) assert(1<=n<=20) assert(1<=m<=20) assert(0<=x<=20) assert(0<=y<=20) board=[[1 for _ in range( 展开全文
头像 sum~
发表于 2022-03-21 11:10:38
(1)dp数组含义:dp[x][y]表示到达(x, y)的路径条数 (2)递推公式:dp[i][j] = dp[i-1][j] + dp[i][j - 1];(因为卒只可以向右或者向下走) (3)初始化:dp[0][0] = 1,根据马的坐标(x, y),可以将(x,y)和马可以到达的八个点的坐标对 展开全文
头像 编程小鹏
发表于 2024-04-09 21:28:16
import java.util.Arrays; import java.util.Scanner; public class Main { static int N = 21; public static void main(String[] args) { Scanner in = n 展开全文
头像 当哥本哈根遇到
发表于 2023-03-13 13:36:35
#include <iostream> #include <vector> using namespace std; void DP13() { int n, m, x, y; while (cin >> n >> m >> 展开全文
头像 牛客74234309号
发表于 2022-03-08 21:04:37
最后一个点不知道为啥过不去,偷懒了一下 import java.util.*; public class Main{     public static void main(String  展开全文
头像 牛客218667325号
发表于 2023-07-24 22:21:15
import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = 展开全文
头像 牛客211361839号
发表于 2022-04-27 22:40:38
function riverQuestion(x, y, n, m, data) {   if (x >= 0 && x <= n && y >= 0 && y <= m) data[x][y] = -1;   展开全文