蓝桥杯算法双周赛心得——迷宫逃脱(dp)

大家好,我是晴天学长,dp版的来啦,可以是受益匪浅啊,需要的小伙伴可以关注支持一下哦!后续会继续更新的。💪💪💪


1) .迷宫逃脱

在这里插入图片描述

迷官逃脱[算法赛]
问题描述
在数学王国中,存在- -个大小为N x M的神秘迷言。第i行第j个位置坐标为(i,j),每个位置(i;,j) (1≤i≤N,1≤j≤M)都对应着一个正整数Aij。迷宫的左上角坐标为(1,1), 右下角坐标为(N,M)。
小蓝初始位于坐标(1,1),并携带著Q把密匙。他的目标是移动到迷言的终点,即坐标(N, M)处。但是通往迷宫尽头的道路并不是一-帆风顺的, 在前进的过程中,他遇到了一些奇特的规则。

规则如下:

1.小蓝每次只能向右移动一个位置或向下移动一个位置。
2.当小蓝所在位置的数和下一步移动位置的数互质时,会有一扇封闭的铁门, 小蓝需要消耗-把密匙来打开铁门,打开铁门后,这把钥匙将被摧毁。如果没有密匙,小蓝将无法移动到该位置。
你需要输出小蓝从起点到终点路径之和的最大值,如果无法从起点到达终点,输出-1

输入格式

第一行输入包含3个整数N, M, Q,分别为迷言的大小和密匙的数量。
接下来输入N行,每行M个整数,为迷言上的数值。

输出格式

输出仅一-行,包含-个整数,表示管案。
样例输入

331
139
样例输出

28


2) .算法思路

迷宫逃脱(DP版)
1.用快读快输接收数据。
2.建立矩阵
3.打表,建立一个三维的dp表。
4.状态转移方程
1.从上面来
int floor=
2.从左面来
int right=
3.状态转移方程
dp[i][j][k] = Math.,max();

4.输出dp[n][m][k](带循环)。


3).算法步骤

1.读取输入的N、M和Q的值(迷宫的尺寸和最大钥匙数量)。
2.创建一个名为"grid"的二维网格数组,用于存储迷宫中每个单元格的值。
3.初始化动态规划数组"dp",其维度为[1100][1100][4],用于存储不同钥匙数量下每个位置的最大分数。
4.读取迷宫中每个单元格的值,并将其存储在"grid"数组中。
5.在"dp"数组中设置起始位置(1, 1)的初始值。因为它是起始位置,所以分数等于该单元格的值。
6.开始动态规划过程,遍历迷宫中的每个单元格。

  1. 对于每个单元格,遍历钥匙数量(从0到Q),计算在给定钥匙数量下到达该单元格的最大分数。
  2. 检查是否可以从上方的单元格移动到当前单元格(即(i-1, j))或从左侧的单元格移动到当前单元格(即(i, j-1))。
  3. 如果可以从上方单元格移动,根据上方单元格的分数和当前单元格的值更新当前单元格的最大分数。
  4. 如果可以从左侧单元格移动,根据左侧单元格的分数和当前单元格的值更新当前单元格的最大分数。
  5. 重复步骤6到步骤10,遍历迷宫中的所有单元格。

7.找到最后一行和最后一列的单元格中不同钥匙数量下的最大分数。
8.将最大分数作为结果进行打印输出。如果最大分数小于或等于0,则输出-1。
9.刷新输出。


4). 代码实例

package LanQiaoTest.动态规划;import jdk.swing.interop.SwingInterOpUtils;import java.io.*;public class 迷宫逃脱_DP {static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));static PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));static long dp[][][] = new long[1100][1100][4];static String[] lines;public static void main(String[] args) throws IOException {lines = in.readLine().split(" ");int N = Integer.parseInt(lines[0]);int M = Integer.parseInt(lines[1]);int Q = Integer.parseInt(lines[2]);long[][] grid = new long[N + 10][M + 10];// 接收数据for (int i = 1; i <= N; i++) {lines = in.readLine().split(" ");for (int j = 1; j <= M; j++) {grid[i][j] = Integer.parseInt(lines[j - 1]);}}//起点赋初值(因为起点没有上一个的状态,自己就是自己)for (int i = 0; i <= Q; i++) {dp[1][1][i] = grid[1][1];}//开始打表for (int i = 1; i <= N; i++) {for (int j = 1; j <= M; j++) {for (int k = 0; k <= Q; k++) {int floor = gcd((int) grid[i][j], (int) grid[i][j - 1]) == 1 ? 1 : 0;int left = gcd((int) grid[i][j], (int) grid[i - 1][j]) == 1 ? 1 : 0;//注意钥匙不能超了//上面来//是质数,必须有钥匙。if (k - floor >= 0 && dp[i][j - 1][k - floor] != 0) {dp[i][j][k] = Math.max(dp[i][j][k], dp[i][j - 1][k - floor] + grid[i][j]);}//左面来,注意更新最大值if (k - left >= 0 && dp[i - 1][j][k - left] != 0) {dp[i][j][k] = Math.max(dp[i][j][k], dp[i - 1][j][k - left] + grid[i][j]);}}}}//找到终点的最大值long result = 0;for (int i = 0; i <= Q; i++) {result = Math.max(result, dp[N][M][i]);}out.println(result <= 0 ? -1 : result);out.flush();}private static int gcd(int a, int b) {return b == 0 ? a : gcd(b, a % b);}}

4).总结

  • 越界的地方不能算进去,不然不可达到的地方也会加入答案中。

试题链接:

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

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

相关文章

便携式心电图机方案_基于MT6735平台的手持心电图机

便携式心电图机具备体积小、易携带、兼容12导模式的特点&#xff0c;通过工频滤波、基线滤波和肌电滤波等处理&#xff0c;能够获得更精准的心电图谱。该设备可以与医院信息系统(HIS)相连接&#xff0c;实现患者信息的共享。采集的心电数据可以通过无线方式发送到心电判读平台&…

企业建数仓的第一步是选择一个好用的ETL工具

当企业决定建立数据仓库&#xff08;Data Warehouse&#xff09;&#xff0c;第一步就是选择一款优秀的ETL&#xff08;Extract, Transform, Load&#xff09;工具。数据仓库是企业数据管理的核心&#xff0c;它存储、整合并管理各种数据&#xff0c;为商业决策和数据分析提供支…

PC8250(CC-CV控制)5V/8A同步降压恒流恒压软启动带EN功能只需极少外围元件

概述 PC8250是一个同步降压转换器输出电流至8A。它的设计允许操作电源电压范围从9V到42V。外部关闭功能可以通过逻辑电平来控制COMP/EN引脚下降&#xff0c;然后进入待机模式。外部补偿使反馈控制具有良好的线路和负载调节&#xff0c;外部设计灵活。PC8250在CC&#xff08;恒定…

【读懂AUTOSAR规范】PduR 缓存分配(Buffer allocation)

1. 前言 PDU路由器模块支持将I-PDU从一个源总线网关到一个或多个目标总线。与从/到本地模块的传输和接收不同,PDU路由器模块必须同时充当接收器和发射器,并且在某些情况下还提供I-PDU的缓冲。网关需求被有意地分离,以便在不需要网关的情况下高效实现PDU路由器模块。如果PDU…

华三无线控制器WX2540H配合准入做Portal认证

数据通信 - 建设篇 - 无线 第四章 华三无线控制器WX2540H配合准入做Portal认证 数据通信 - 建设篇 - 无线系列文章回顾华三无线控制器WX2540H配合准入做Portal认证前言其他配置优化参考来源系列文章回顾 第一章 华三无线控制器配置本地转发 第二章 华三无线控制器配置802.1X认…

Redis-Day1基础篇(初识Redis, Redis常见命令, Redis的Java客户端)

Redis-Day1基础篇 初识Redis认识NoSQL认识Redis安装Redis启动RedisRedis客户端 Redis命令数据结构介绍通用命令操作命令StringHashListSetSortedSet Redis的Java客户端客户端对比Jedis客户端Jedis快速入门Jedis连接池 SpringDataRedis客户端SpringDataRedis概述SpringDataRedis…

boardmix AI思维导图,一键自动生成思维导图!

在日常学习和工作中&#xff0c;我们常常需要记忆和整理大量的知识点和思维结构。 此时&#xff0c;思维导图的存在就大大方便了我们的工作。与传统的文本笔记不同&#xff0c;思维导图可以结合文字、图像、颜色等多种元素&#xff0c;帮助我们更好地整理和分析知识的关系&…

centos7上用docker部署redis

1. 下载redis镜像 docker pull redis docker images # 查看镜像是否下载成功2. 安装redis容器 2.1 先准备好配置文件redis.conf vi /data/redis/redis.conf写入配置信息&#xff0c;appendonly yes&#xff0c;如果需要给redis配置密码&#xff0c;可以写入requirepass root…

如何选择更快更稳定的存储服务器

如何选择更快更稳定的存储服务器 存储介质&#xff1a;存储服务器的主要存储介质包括固态硬盘&#xff08;SSD&#xff09;和机械硬盘&#xff08;HDD&#xff09;。相比于机械硬盘&#xff0c;固态硬盘具有更高的读写速度和更低的延迟&#xff0c;因此能够提供更快的数据传输…

python安装的记录

python setup.py install --user

(附程序)AD采集中的10种经典软件滤波程序优缺点分析

前言 本次我们学习一下AD采集的一些简单的软件滤波算法并分析优缺点 本篇博客大部分是自己收集和整理&#xff0c;如有侵权请联系我删除。 AD采样点的电压多少有点起伏波动&#xff0c;经运放放大后电压的波动如果超过ADC的分辩率&#xff0c;则显示的值会出现波动。波动如…

RTOS的任务触发底层逻辑

&#xff08;定时器用于计时和触发事件&#xff0c;任务则由调度器进行调度和执行&#xff1a;每当时钟节拍到达时&#xff0c;系统会触发一个称为 tick 中断的事件。当 tick 中断发生时&#xff0c;操作系统会在中断服务例程中执行一定的处理&#xff0c;其中包括更新任务的运…

C++算法入门练习——相同的二叉查找树

将第一组n​个互不相同的正整数先后插入到一棵空的二叉查找树中&#xff0c;得到二叉查找树T1​&#xff1b;再将第二组n个互不相同的正整数先后插入到一棵空的二叉查找树中&#xff0c;得到二叉查找树T2​。判断T1​和T2​​是否是同一棵二叉查找树。 二叉查找(搜索)树定义&am…

Halcon学习笔记

目录 一.简介 一.简介 Halcon和OpenCV在工业应用中的区别&#xff1a; OpenCV的精度没Halcon高&#xff1b;OpenCV没有模板匹配&#xff0c;Halcon有&#xff0c;而且Halcon匹配的精度更高。

DALSA.SaperaLT.SapClassBasic无法加载,试图加载格式不正确的程序,c#

情景&#xff1a;用c#wpf写DALSA线扫相机的项目&#xff0c;生成时不报错&#xff0c;运行到DALSA相关的代码就报错找不到dll&#xff08;DALSA的技术支持没给到任何支持 &#xff09; 一.根据框架选择dll 如果是.net framework框架&#xff08;比如说.net480&#xff09;&am…

一份全面「梳理LLM幻觉问题」的综述

文章目录 一文全面梳理「LLM 幻觉问题」1. 幻觉的分类2. 幻觉的来源2.1 幻觉来自数据2.2 幻觉来自训练2.3 幻觉来自生成/推理 3. 幻觉的检测3.1 事实性幻觉的检测3.2 忠实性幻觉的检测 4. 幻觉的评估5. 幻觉的解决 一文全面梳理「LLM 幻觉问题」 相信大家在使用ChatGPT或者其他…

vue3源码

/*! Vue.js v2.6.14© 2014-2021 Evan YouReleased under the MIT License. */ (function (global, factory) { typeof exports ‘object’ && typeof module ! ‘undefined’ ? module.exports factory() : typeof define ‘function’ && define.am…

PC8259(CC-CV控制)同步降压芯片5V/4.8A 输出频率可调 带电流限制 QFN20封装

概述 PC8259是一个同步降压转换器输出电流为4.8A在9V至36V。外部关闭功能可以由逻辑电平控制以下拉COMP/EN引脚&#xff0c;然后进入待机模式。外部补偿使反馈控制具有良好的线性以及具有灵活外部设计的负载调节。PC8259在CC&#xff08;恒定输出电流&#xff09;模式或CV&…

python数据结构与算法-17_二叉查找树

二叉查找树(BST) 二叉树的一种应用就是来实现堆&#xff0c;今天我们再看看用二叉查找树(Binary Search Tree, BST)。 前面有章节说到了查找操作&#xff0c;包括线性查找、二分查找、哈希查找等&#xff0c;线性查找效率比较低&#xff0c;二分又要求必须是有序的序列&#x…

亚马逊卖家不想被平台限制,应如何脱离平台,建立自己的跨境独立站?

随着跨境电商的快速发展&#xff0c;越来越多的卖家选择在亚马逊等电商平台上销售自己的产品。然而&#xff0c;这些平台往往会限制卖家的经营行为&#xff0c;收取高额的佣金和费用&#xff0c;给卖家带来了很大的压力和风险。因此&#xff0c;一些卖家开始考虑脱离电商平台&a…