动态规划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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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所示的网络…