[NOIP2002]过河卒 标准递归

简介: [NOIP2002]过河卒 标准递归

题目地址

登录—专业IT笔试面试备考平台_牛客网

输入输出描述

如果没有马存在 就是一个经典的递归题

// Dduo
// Bhu Bigdata 1421
package Dduo;
import java.util.*;
// Eslipse IDE 2020-08
// JDK 1.8
// 2024/5/21
 
public class Main  {
    static Scanner sc=new Scanner(System.in);
    static int cnt=0;
    public static void main(String[] args) {
      //过河卒
      //b
      int n=sc.nextInt();
      int m=sc.nextInt();
      //马
//      int x=sc.nextInt();
//      int y=sc.nextInt();
      //递归
      rec(n,m);
      
      System.out.print(cnt);
    }
    public static void rec(int x, int y) {
      //递归出口
      if(x<0||y<0)return;
      //递归式
      else {
        if(x==0&&y==0)cnt++;
        else {
          rec(x-1,y);
          rec(x,y-1);
        }
      }
    }
 }

递归解法

// Dduo
// Bhu Bigdata 1421
package Dduo;
import java.util.*;
// Eslipse IDE 2020-08
// JDK 1.8
// 2024/5/21
 
public class Main  {
    static Scanner sc=new Scanner(System.in);
    //计数器
    static int cnt=0;
    //马
    static int horse_X,horse_Y;
    static int x1,y1;
    static int x2,y2;
    static int x3,y3;
    static int x4,y4;
    static int x5,y5;
    static int x6,y6;
    static int x7,y7;
    static int x8,y8;
    public static void main(String[] args) {
      //过河卒
      //b
      int n=sc.nextInt();
      int m=sc.nextInt();
      //马
      horse_X=sc.nextInt();
      horse_Y=sc.nextInt();
      
      x1=horse_X+1;y1=horse_Y-2;
      x2=horse_X+2;y2=horse_Y-1;
      x3=horse_X+2;y3=horse_Y+1;
      x4=horse_X+1;y4=horse_Y+2;
      x5=horse_X-1;y5=horse_Y+2;
      x6=horse_X-2;y6=horse_Y+1;
      x7=horse_X-2;y7=horse_Y-1;
      x8=horse_X-1;y8=horse_Y-2;
      
      //递归
      rec(n,m);
      
      System.out.print(cnt);
    }
    public static void rec(int x, int y) {
      //递归出口
      //跑出棋盘
      if(x<0||y<0)return;
      //马的控制范围
      if(x==horse_X&&y==horse_Y)return;
      if(x==x1&&y==y1)return;
      if(x==x2&&y==y2)return;
      if(x==x3&&y==y3)return;
      if(x==x4&&y==y4)return;
      if(x==x5&&y==y5)return;
      if(x==x6&&y==y6)return;
      if(x==x7&&y==y7)return;
      if(x==x8&&y==y8)return;
      //递归式
      if(x==0&&y==0)cnt++;
        else {
          rec(x-1,y);
          rec(x,y-1);
        }
      }
 }

目录
相关文章
|
6月前
【洛谷 P1002】[NOIP2002 普及组] 过河卒 题解(递归+记忆化搜索)
`NOIP2002`普及组的过河卒问题是一个棋盘路径计数挑战。卒从$(0,0)$出发到$(n,m)$,只能向下或向右移动,马在$(c1,c2)$固定,控制某些点。任务是计算不受马阻挡的路径数。输入是目标和马的位置,输出是路径总数。使用动态规划和记忆化搜索避免重复计算,样例输入$(6,6,3,3)$输出$6$。代码中定义了$f(x,y)$计算$(x,y)$处的路径数,利用边界条件和递推关系计算。
80 0
|
6月前
|
C++
【洛谷 P1047】[NOIP2005 普及组] 校门外的树 题解(位集合)
**NOIP2005普及组问题:**给定长度为$l$的马路,上面等距种植着树,需移除位于建造地铁区域的树。输入包含马路长度和区域数,以及各区域起止点,输出移树后剩余树的数量。样例输入:$l=500$, $m=3$,输出:$298$。$20\%$数据无区域重合,$1 \leq l \leq 10^4$,$1 \leq m \leq 100$。解决方案利用位集合(bitset)表示树的状态,遍历区域将树设为0,最后统计1的数量。AC代码使用C++实现。
32 0
|
6月前
|
存储
【洛谷 P2141】[NOIP2014 普及组] 珠心算测验 题解(集合+多重循环)
**NOIP2014普及组的珠心算测验题要求参赛者找出给定集合中多少个数可表示为其他两个不同数的和。输入含n个正整数,输出满足条件的数的个数。样例输入4个数,输出2,因1+2=3且1+3=4。代码利用集合存储和,遍历所有数对组合,当找到匹配和时插入集合,最后输出集合大小。注意数据规模为n≤100,数不超过10,000。**
142 0
|
7月前
【错题集-编程题】过河卒(动态规划-路径问题)
【错题集-编程题】过河卒(动态规划-路径问题)
|
7月前
日拱一卒,月进一步(6)(杨辉三角2)
119. 杨辉三角 II - 力扣(LeetCode)
46 0
1314:【例3.6】过河卒(Noip2002)
1314:【例3.6】过河卒(Noip2002)
152 0
|
7月前
蓝桥备战--纪念品分组OJ532,贪心证明
蓝桥备战--纪念品分组OJ532,贪心证明
31 0
|
7月前
蓝桥备战--分糖果OJ2928 贪心 分类讨论
蓝桥备战--分糖果OJ2928 贪心 分类讨论
71 0
|
算法
【过河卒】回溯算法保姆式解题
【过河卒】回溯算法保姆式解题
106 0
|
存储 人工智能 测试技术
第十四届蓝桥杯省赛JavaB组试题E【蜗牛】Dijkstra堆优化 or 线性DP?
第十四届蓝桥杯省赛JavaB组试题E【蜗牛】Dijkstra堆优化 or 线性DP?
143 0
第十四届蓝桥杯省赛JavaB组试题E【蜗牛】Dijkstra堆优化 or 线性DP?