藍橋杯算法雙周賽心得——迷宮逃脫(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.pswp.cn/news/164072.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/164072.shtml
英文地址,請注明出處:http://en.pswp.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…