動態規劃VS記憶化搜索(2)

luoguP1434滑雪

?題目描述

Michael 喜歡滑雪。這并不奇怪,因為滑雪的確很刺激。可是為了獲得速度,滑的區域必須向下傾斜,而且當你滑到坡底,你不得不再次走上坡或者等待升降機來載你。Michael 想知道在一個區域中最長的滑坡。區域由一個二維數組給出。數組的每個數字代表點的高度。下面是一個例子:
1 ? 2 ? 3 ? 4 ? 5
16 ?17 ?18 ?19 ?6
15 ?24 ?25 ?20 ?7
14 ?23 ?22 ?21 ?8
13 ?12 ?11 ?10 ?9
一個人可以從某個點滑向上下左右相鄰四個點之一,當且僅當高度會減小。在上面的例子中,一條可行的滑坡為 24-17-16-1(從 24 開始,在 1 結束)。當然 25-24-23-······-3-2-1 更長。事實上,這是最長的一條。

輸入格式

輸入的第一行為表示區域的二維數組的行數 R 和列數 C。下面是 R行,每行有 C$個數,代表高度(兩個數字之間用 1個空格間隔)。

輸出格式

輸出區域中最長滑坡的長度。

輸入輸出樣例?

?輸入
5 5
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9

輸出?
25

?說明/提示

對于 100% 的數據,1<=R,C<=100。

?還是這道題,記憶化搜索已經講完了他的題目解法,見(1)中的題目做法,但兩種算法的PK仍然在繼續,因為動態規劃還沒有出場!

有請動態規劃!

記憶化搜索和我十分相似,甚至我們兩個可以互相替代,我的時間更短,所以記憶化搜索應該輸在我手上。至于這題,我的方法需要兩個輔助,堆和opreator.

operator是一個提供運算符重載的東西,他較為復雜,常用于struct或class,本人喜歡用struct。

struct node{int x,y,val;bool operator>(const node& o)const{return val>o.val;}
};

?由于代碼過于難,我也調了一天,就不讓你們痛苦了。

堆也很簡單,stl大法好!

priority_queue<node,vector<node>,greater<node> >q;

?輸入時要把該點高度扔進堆里,初始化dp[i][j]=1。

?重頭戲在dp,dp無后效性,所以要從小到大進行 dp,由于dp[i][j]的定義是在i,j這個點做滑雪起點時能滑的最大坡,所以從小到大的順序不會有后效性。然后維護方向數組,像搜索一樣擴展。

代碼如下:

#include<bits/stdc++.h>
using namespace std;
struct node{int x,y,val;bool operator>(const node& o)const{return val>o.val;}
};
int dx[4]={0,0,1,-1};
int dy[4]={1,-1,0,0};
int a[1001][1001],n,dp[1001][1001],m;
priority_queue<node,vector<node>,greater<node> >q;
int main(){cin>>n>>m;for (int i=1;i<=n;i++){for (int j=1;j<=m;j++){cin>>a[i][j];q.push({i,j,a[i][j]});dp[i][j]=1;}}while (q.size()){int x=q.top().x,y=q.top().y,val=q.top().val;q.pop();int k=dp[x][y];for (int i=0;i<4;i++){int xx=dx[i]+x,yy=dy[i]+y;if (val>a[xx][yy]){dp[x][y]=max(dp[x][y],k+dp[xx][yy]);}}}int ans=0;for (int i=1;i<=n;i++){for (int j=1;j<=m;j++){ans=max(ans,dp[i][j]);}}cout<<ans<<endl;return 0;
}

(如果有誤在評論區留言即可)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/87937.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/87937.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/87937.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

如何將服務守護進程化

進程組 什么是進程組 之前我們提到了進程的概念&#xff0c; 其實每一個進程除了有一個進程 ID(PID)之外 還屬于一個進程組。進程組是一個或者多個進程的集合&#xff0c; 一個進程組可以包含多個進程。 每一個進程組也有一個唯一的進程組 ID(PGID)&#xff0c; 并且這個 PGID …

【跟著PMP學習項目管理】項目管理 之 范圍管理知識點

目錄 一、收集需求 1、知識點匯總 2、輸入 3、工具 4、輸出 二、定義范圍 1、知識點匯總 2、輸入 3、工具 4、輸出 三、創作工作分解結構 1、知識點匯總 2、輸入 3、工具 4、輸出 四、核實范圍 1、知識點匯總 2、輸入 3、工具 4、輸出 五、控制范圍 1、知…

AIX 環境磁盤空間管理指南

AIX 環境磁盤空間管理指南 在AIX環境中&#xff0c;磁盤空間的監控、管理與擴展是運維人員必備的技能。本文通過實際案例&#xff0c;系統地介紹如何查詢磁盤信息、卷組(VG)、邏輯卷(LV)信息&#xff0c;以及在磁盤空間不足時的擴容方案&#xff0c;幫助讀者掌握磁盤空間管理的…

k8s將service的IP對應的不同端口分配到不同的pod上

在Kubernetes中&#xff0c;Service是一種抽象層&#xff0c;它將請求路由到一組Pod。當你需要將Service的不同端口映射到不同的Pod時&#xff0c;可以通過以下兩種主要方式實現&#xff1a; 方法一&#xff1a;使用單個Service的多端口配置 如果不同的Pod提供不同的服務&…

aic8800M40低功耗sdio wifi在arm-linux平臺調試經驗

背景 好多年沒有搞過wifi相關的內容了,最近也被安排上了,把一顆低功耗aic8800M40的芯片在arm-linux開發板上做bring up,記錄一下SDIO wifi調試的過程和經驗,SDIO驅動這里需要改動一些linux內核HOST驅動代碼,會在文章中貼出來: AIC8800M40芯片簡介 這個wifi芯片是一顆低…

Redis基礎(1):NoSQL認識

SQL和NoSQL數據庫可以分為關系型數據庫和非關系型數據庫&#xff0c;SQL(Structured Query Language)相信大家并不陌生&#xff0c;這是用于操作關系型數據庫的語言&#xff0c;而NoSQL&#xff0c;顧名思義&#xff0c;它對應的就是非關系數據庫&#xff0c;它是操作非關系型數…

QT6 源(153)模型視圖架構里的表格窗體視圖 QTableWidget 篇三:源碼及其元素 QTableWidgetItem 的源代碼帶注釋

&#xff08;14&#xff09;本源代碼定義于頭文件 qtablewidget . h 頭文件 &#xff1a; #ifndef QTABLEWIDGET_H #define QTABLEWIDGET_H#include <QtWidgets/qtableview.h> #include <QtWidgets/qtwidgetsglobal.h> #include <QtCore/qlist.h> #include …

SSL證書是網絡安全的一把利刃

SSL證書&#xff08;安全套接層證書&#xff0c;現普遍升級為TLS證書&#xff09;確實是網絡安全領域中一把至關重要的“利刃”&#xff0c;它在保護數據傳輸安全、建立用戶信任、防范網絡攻擊等方面發揮著不可替代的作用。以下是其核心價值與作用的詳細分析&#xff1a;一、SS…

Apache 配置文件提權的實戰思考

在 Linux 系統中&#xff0c;如果普通用戶被授予以 sudo 執行 Apache 并加載自定義配置文件的權限&#xff08;如 sudo apache2 -f /home/user/user.conf&#xff09;&#xff0c;那么該權限極可能被濫用為本地提權路徑。 雖然 Apache 默認采用了更嚴格的權限限制機制&#xff…

代碼隨想錄算法訓練營第四十四天|動態規劃part11

1143.最長公共子序列 題目鏈接&#xff1a;1143. 最長公共子序列 - 力扣&#xff08;LeetCode&#xff09; 文章講解:代碼隨想錄 思路&#xff1a; 其實就是求兩個字符串的最長公共子序列的長度 與公共子數組的區別是可以不連續 &#xff0c;順序對就可以 狀態轉移方程不一樣 …

部署mysql

# 環境: 操作系統window11 安裝了vagrant 通過vagrant部署、啟動虛擬機(centos7) # 準備安裝mysql8 # 添加 MySQL 官方 YUM 源 sudo rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm # 安裝 MySQL Server sudo yum install -y mysql-s…

SQL分析與打印-p6spy組件

有性能消耗&#xff0c;只推薦在非生產環境下使用 SpringBoot3MybatisPlushttps://baomidou.com/guides/p6spy/ MyBatis-Plus提供了SQL分析與打印的功能&#xff0c;通過集成p6spy組件&#xff0c;可以方便地輸出SQL語句及其執行時長。本功能適用于MyBatis-Plus 3.1.0及以上版本…

FLUX.1-Kontext 高效訓練 LoRA:釋放大語言模型定制化潛能的完整指南

在人工智能領域&#xff0c;尤其是大型語言模型&#xff08;LLM&#xff09;的應用浪潮中&#xff0c;高效、低成本地定制模型行為已成為關鍵需求。LoRA&#xff08;Low-Rank Adaptation&#xff09;技術以其參數高效、資源節省的特性脫穎而出。而 FLUX.1-Kontext 作為一款創新…

群暉 DS3617xs DSM 6.1.7 解決 PhotoStation 安裝失敗問題 PHP7.0

群暉 DS3617xs DSM 6.1.7 解決 PhotoStation 安裝失敗問題 PHP7.0問題描述解決方案1. 準備所需文件2. 檢查當前 PHP 版本3. 安裝 PHP 版本5. 查詢已安裝好的套件6. 升級 PHP 版本7. 手動安裝套件PhotoStation注意事項總結問題描述 在群暉 DS3617xs DSM 6.1.7-15284 版本中&…

pnpm 升級

pnpm 的安裝源太多了&#xff0c;感覺系統變量都有引入順序。 今天踩坑記錄&#xff1a; pnpm &#xff0c;如果最初用npm 裝的&#xff0c;可以用npm 升級&#xff1b; 如果最初用brew 裝的&#xff0c;得用brew 升級&#xff1b; 如果最初是用corepack 裝的得用corepack 升級…

[C#] WPF - 資源URI

一、組成 1、資源URI總共包括4個部分(當前程序集可以省略前3個)&#xff1a; ①&#xff1a;pack://application:,,, ②&#xff1a;/[程序集名稱] ③&#xff1a;;Component ④&#xff1a;/[資源路徑] 二、舉例 項目結構如下圖所示&#xff1a; 1、MainWindow.xaml 文件…

【Mysql系列】Mysql 多級隔離級別揭秘

目錄 一、什么是隔離級別 1.1、為什么復合操作需要事務&#xff1f; 1.2、事務的 ACID 特性如何保障操作可靠性&#xff1f; 1.3、隔離性通過隔離級別來控制 二、為什么用多級隔離級別 2.1、事務并發執行時可能引發以下問題 2.1.1、臟讀&#xff08;Dirty Read&#xff…

odoo17 警示: selection attribute will be ignored as the field is related

在 Odoo 17 中&#xff0c;當使用 related 字段時&#xff0c;直接在 fields.Selection 中指定選擇列表會被忽略&#xff08;因為選擇項會從關聯字段繼承&#xff09;。wtd_fuwlx fields.Selection(服務類型 , relatedwtd_id.fuwlx, storeTrue)遇到了一個警告&#xff0c;提示…

gemma-3n-E2B多模態模型使用案例:支持文本、圖像、語音輸入

參考&#xff1a; https://developers.googleblog.com/en/introducing-gemma-3n-developer-guide/下載&#xff1a; https://modelscope.cn/models/google/gemma-3n-E2B-it 模型下載 運行代碼&#xff1a; https://github.com/huggingface/huggingface-gemma-recipes 微調&…

計算機網絡實驗——互聯網安全實驗

實驗1. OSPF路由項欺騙攻擊和防御實驗一、實驗目的驗證路由器OSPF配置過程。驗證OSPF建立動態路由項過程。驗證OSPF路由項欺騙攻擊過程。驗證OSPF源端鑒別功能的配置過程。驗證OSPF防路由項欺騙攻擊功能的實現過程。二、實驗任務使用自己的語言簡述該實驗原理。如圖1所示的網絡…