21.2:象棋走马问题

news2024/9/23 9:22:12

请同学们自行搜索或者想象一个象棋的棋盘,
然后把整个棋盘放入第一象限,棋盘的最左下角是(0,0)位置
那么整个棋盘就是横坐标上9条线、纵坐标上10条线的区域
给你三个 参数 x,y,k
返回“马”从(0,0)位置出发,必须走k步
最后落在(x,y)上的方法数有多少种?

一:暴力方法

	/**
     * 暴力方法
     */
    public static int jump(int a, int b, int k) {
        return process(a, b, k, 0, 0);
    }

    //返回落在a,b上并且走k步的方法数
    public static int process(int a, int b, int k, int x, int y) {
        if (k == 0) {
            return (x == a && y == b) ? 1 : 0;
        }

        //9行10列
        if (x < 0 || y < 0 || x > 9 || y > 8) {
            return 0;
        }

        int p1 = process(a, b, k - 1, x + 2, y + 1);
        int p2 = process(a, b, k - 1, x + 1, y + 2);
        int p3 = process(a, b, k - 1, x + 2, y - 1);
        int p4 = process(a, b, k - 1, x + 1, y - 2);
        int p5 = process(a, b, k - 1, x - 2, y + 1);
        int p6 = process(a, b, k - 1, x - 1, y + 2);
        int p7 = process(a, b, k - 1, x - 2, y - 1);
        int p8 = process(a, b, k - 1, x - 1, y - 2);

        return p1 + p2 + p3 + p4 + p5 + p6 + p7 + p8;
    }

表格法

在这里插入图片描述

有三个变化的变量分别是:x,y,k 所以是一个三维的表格。

当层数是0的时候,只有(a,b,0)处是1,其他位置是0。

我还发现上一层是严格的依赖下一层的。上一层的每一个表格严格依赖下一层对应的八个表格(不越界的话)。

那填表的顺序就是由下往上一层一层的填表。

注意最后返回的是:dp[][][][] [ 0 ] [ 0 ] [ k ] 而不是 dp[][][][] [ a ] [ b ] [ k ] —> 表格法可以看成是递归的归过程。最终归的终点是最开始传入

进方法的起点位置。

本题可以想象一下:刚开始一定是(0,0,k) 之后向下层依赖,辐射到下一层的8个位置(不越界),之后下一层的8个位置继续向下层辐射8个位置,直到辐射到最底层,如果辐射到的最低层包含着(a,b,0)就算可以到达目标位置。

	/**
     * 迭代法
     */
    public static int dp(int a, int b, int k) {
        //这里需要考虑k以及k==0时的情况,所以取k的范围是k+1个
        int[][][] dp = new int[10][9][k + 1];
        //依赖关系是:上层依赖下层,最终返回最上层,所以从下向上构建
        dp[a][b][0] = 1;
        for (int plie = 1; plie <= k; plie++) {
            //这一层的每个数都依赖下一层。
            for (int x = 0; x < 10; x++) {
                for (int y = 0; y < 9; y++) {

                    int p1 = pick(dp, x + 2, y + 1, plie - 1);
                    int p2 = pick(dp, x + 1, y + 2, plie - 1);
                    int p3 = pick(dp, x + 2, y - 1, plie - 1);
                    int p4 = pick(dp, x + 1, y - 2, plie - 1);
                    int p5 = pick(dp, x - 2, y + 1, plie - 1);
                    int p6 = pick(dp, x - 1, y + 2, plie - 1);
                    int p7 = pick(dp, x - 2, y - 1, plie - 1);
                    int p8 = pick(dp, x - 1, y - 2, plie - 1);

                    dp[x][y][plie] = p1 + p2 + p3 + p4 + p5 + p6 + p7 + p8;

                }
            }
        }

        return dp[0][0][k];//注意返回的是(0,0,k)这个坐标
    }

    public static int pick(int[][][] dp, int x, int y, int pile) {
        if (x < 0 || y < 0 || x > 9 || y > 8) {
            return 0;
        } else {
            return dp[x][y][pile];
        }
    }

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

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

相关文章

数据结构—串

4.1串 4.1.1串的定义 串&#xff08;String&#xff09;——零个或多个任意字符组成的有限序列 S"a1 a2...an"串的定义——几个术语 子串&#xff1a;串中任意个连续字符组成的子序列称为该串的子串 例如&#xff0c;“abcde”的子串有&#xff1a; “ ”、“a”、…

【C++】【自用】选择题 刷题总结

文章目录 【类和对象】1. 构造、拷贝构造的调用2. 静态成员变量3. 初始化列表4. 成员函数&#xff1a;运算符重载5. 友元函数、友元类55. 特殊类设计 【细节题】1. 构造 析构 new \ deletet、new[] \ delete[] 【类和对象】 1. 构造、拷贝构造的调用 #include using namespace…

大数据面试题:超详细版MapReduce工作原理

面试题来源&#xff1a; 《大数据面试题 V4.0》 大数据面试题V3.0&#xff0c;523道题&#xff0c;679页&#xff0c;46w字 参考答案&#xff1a; MapReduce详细流程&#xff1a; 1、准备待处理文件&#xff08;200M&#xff09; 2、submit()对原始文件进行切片分析&#…

热点活动-秒杀功能设计

一、需求描述 秒杀活动是电子商务兴起后出现的一种新型的购物方式&#xff0c;通过网上APP、小程序等平台推出一些低于市场价格的商品&#xff0c;提升购买率的营销活动&#xff0c;所有买家在同一时间网上抢购的一种销售方式。对比其他的营销活动&#xff0c;秒杀限时性更强&…

地平线J5芯片部署参考算法(2023.07.27)

本文主要是记录地平线官方提供的可在J5芯片上部署的参考算法。 参考算法数据集FPSPointPillarsKITTI116 (双核)CenterPointNuscenes98.72&#xff08;双核&#xff09;FCOS3DNuscenes589 (双核)GANetCULane2431&#xff08;双核&#xff09;Swin TransformerImageNet133&#…

网络加速技巧

某APP限制网速&#xff0c;可以这么做&#xff1a; &#xff08;1&#xff09;把网络禁用 &#xff08;2&#xff09;在APP的设置里面&#xff0c;把优化速率打开 &#xff08;3&#xff09;启用网络 2023年7月27日亲测有用&#xff0c;开启优化速率之前是100k/s&#xff0c;开…

机器学习---混淆矩阵代码

1. 导包&#xff1a; import pandas as pd from sklearn.preprocessing import LabelEncoder from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.pipeline import Pipeline from sklearn.svm import SVC …

共用体类型

共用体&#xff08;union&#xff09;是一种成员共享存储空间的结构体类型。 union 共用体类型名 {成员列表 } 共用体内存长度是所有成员内存长度的最大值。 #include <iostream> using namespace std;int main() {//先声明共用体类型再定义共用体对象 union A {int m,…

11-2_Qt 5.9 C++开发指南_QSqlQueryModel的使用(QSqlQueryModel 只能作为只读数据源使用,不可以编辑数据)

文章目录 1 QSqlQueryModel 功能概述2 使用 QSqlQueryModel 实现数据查询2.1 实例功能2.2 可视化UI设计2.3 主窗口类定义&#xff08;去除自动生成的槽函数&#xff09;2.4 打开数据库2.5 记录移动 1 QSqlQueryModel 功能概述 从下图中可以看到&#xff0c;QSqlQueryModel 是 …

代码随想录算法训练营day13 | 239. 滑动窗口最大值,347. 前 K 个高频元素

239. 滑动窗口最大值 目录 239. 滑动窗口最大值 347. 前 K 个高频元素 239. 滑动窗口最大值 难度&#xff1a;hard 类型&#xff1a;队列&#xff0c;单调队列&#xff0c;滑动窗口 思路&#xff1a; 构造单调队列&#xff0c;维护大小为k的队列。队列里的元素始终是单调递…

无法加载文件 C:\Program Files\nodejs\npm.ps1,因为在此系统上禁止运行脚本。npm.ps1 cannot be loaded

目录 原因 解决方法 提示 查看当前的执行策略命令 改回默认值 "Restricted"命令 这个错误提示是因为您的系统禁止执行 PowerShell 脚本。 原因 现用执行策略是 Restricted&#xff08;默认设置&#xff09; 解决方法 以管理员身份运行 PowerShell&#xff1a;右键…

AICodeConvert网站,可以用AI把代码从一种语言转换为另一种语言实现,代码开源了,从 6.24 到现在一个月, 没有主动推广,居然9.8K 访问量

这是我一个之前周六 6.24 开始验证思路的项目&#xff0c;验证的感觉差不多&#xff0c;不做主动推广到现在一个月&#xff0c;访问量 9.8K 。 源码开源了&#xff0c;github.com 网址&#xff1a;AICodeConvert 另一个在佛系验证中的还有这个&#xff1a;Base64.kr&#xf…

gedit更改字体大小颜色、行号、更改各种属性

最近在linux&#xff08;CentOS&#xff09;中运行gedit时发现&#xff1a; 如果用普通用户运行&#xff0c;不会报错&#xff0c;但是不会出现Preferences &#xff08;首选项&#xff09;等选项&#xff0c;不能进行基本属性参数的更改&#xff1b;如果采用su、sudo 运行则会…

机器学习之十大经典算法

机器学习算法是计算机科学和人工智能领域的关键组成部分&#xff0c;它们用于从数据中学习模式并作出预测或做出决策。本文将为大家介绍十大经典机器学习算法&#xff0c;其中包括了线性回归、逻辑回归、支持向量机、朴素贝叶斯、决策树等算法&#xff0c;每种算法都在特定的领…

云原生架构的定义

前言&#xff1a; 从技术的角度&#xff0c;云原生架构是基于云原生技术的一组架构原则和设计模式的集合&#xff0c;旨在将云应用中非业务代码的部分进行最大化的剥离&#xff0c;从而让云设施接管应用中原有的大量非功能特性&#xff08;如弹性、韧性、安全、可观测性、灰度…

MySQL中锁的简介——全局锁

1.锁的概述及分类 2.全局锁的介绍 给数据库加全局锁&#xff1a; flush tables with read lock;数据备份&#xff1a; mysqldump备份指令 root用户名 1234 密码 itcast数据库名称 itcast.sql备份文件名称 mysqldump -uroot -p1234 itcast >itcast.sql;数据库全局锁解锁&am…

复现YOLOv5改进最新MPDIoU:有效和准确的边界盒回归的损失,打败G/E/CIoU,效果明显!!!

MPDIoU: A Loss for Efficient and Accurate Bounding Box Regression 论文简介MPDIoU核心设计思路论文方法实验部分加入YOLOv5代码论文地址:https://arxiv.org/pdf/2307.07662.pdf 论文简介 边界盒回归(Bounding box regression, BBR)广泛应用于目标检测和实例分割,是目标…

word显示书签并给书签添加颜色

CTRg 定位书签 在 Word 的用户界面中&#xff0c;没有直接的选项可以批量为所有书签设置颜色。但你可以使用 VBA 宏或者编写自定义的功能来实现这个需求。这里给出一个简单的 VBA 宏&#xff0c;它可以设置当前文档中所有书签内文本的颜色&#xff1a;vba Sub ColorAllBookmark…

【高级数据结构】线段树

目录 最大数&#xff08;单点修改&#xff0c;区间查询&#xff09; 线段树1&#xff08;区间修改&#xff0c;区间查询&#xff09; 最大数&#xff08;单点修改&#xff0c;区间查询&#xff09; 洛谷&#xff1a;最大数https://www.luogu.com.cn/problem/P1198 题目描述 …

11-3_Qt 5.9 C++开发指南_QSqlQuery的使用(QSqlQuery 是能执行任意 SQL 语句的类)

文章目录 1. QSqlQuery基本用法2. QSqlQueryModel和QSqlQuery联合使用2.1 可视化UI设计框架2.1.1主窗口的可视化UI设计框架2.1.2 对话框的可视化UI设计框架 2.2 数据表显示2.3 编辑记录对话框2.4 编辑记录2.5 插入记录2.6 删除记录2.7 记录遍历2.8 程序框架及源码2.8.1 程序整体…