【每日一题】ABC311G - One More Grid Task | 单调栈 | 简单

题目内容

原题链接

给定一个 n n n m m m 列的矩阵,问权值最大的子矩阵的权值是多少。

对于一个矩阵,其权值定义为矩阵中的最小值 m i n v minv minv 乘上矩阵中所有元素的和。

数据范围

  • 1 ≤ n , m ≤ 300 1\leq n,m \leq 300 1n,m300
  • 1 ≤ a i ≤ 300 1\leq a_i\leq 300 1ai300

题解

对于这类矩阵问题,通常做法都是枚举矩阵的下边界和下边界,这样就可以将矩阵看成一个一维数组问题。

考虑对于一个一维数组,找到其中一个子数组(连续子序列),满足子数组的最小值乘上子数组的元素和最大。

那么问题就非常显然了,考虑数组中每个元素作为子数组的最小值,考虑这个子数组的左右端点,就是考虑其左边和右边第一个小于其的元素即可。这个就是单调栈的经典应用,单调栈在这里是 O ( m ) O(m) O(m) 的。

时间复杂度: O ( n 2 m ) O(n^2m) O(n2m)

代码

#include <bits/stdc++.h>
using namespace std;const int N = 310;
int a[N][N];
// 列前缀和
int col[N][N];
int stk[N];
// up ~ down 这个上下界内每个列左边第一个小于该列最小值的列
int L[N], R;
// up ~ down 这个上下界内每个列的元素之和 的前缀和
int pre[N];
// up ~ down 这个上下界内每个列的最小值
int cmin[N];// up ~ down 内一个列的元素和
int up, down;
int v(int idx) {return col[down][idx] - col[up - 1][idx];
}int main()
{int n, m;cin >> n >> m;for (int i = 1; i <= n; ++i)for (int j = 1; j <= m; ++j) {cin >> a[i][j];// 每一行的前缀和col[i][j] = col[i - 1][j] + a[i][j];}long long ans = 0;// 枚举子矩阵的上下边界for (up = 1; up <= n; ++up) {for (int j = 1; j <= m; ++j) cmin[j] = a[up][j];for (down = up; down <= n; ++down) {// 每一列的最小值for (int j = 1; j <= m; ++j) cmin[j] = min(cmin[j], a[down][j]);int top = 0;for (int j = 1; j <= m; ++j) {while (top > 0 && cmin[stk[top]] >= cmin[j]) top -= 1;if (top == 0) L[j] = 1;else L[j] = stk[top] + 1;stk[++top] = j;// 每一行的前缀和pre[j] = pre[j - 1] + v(j);}top = 0;for (int j = m; j >= 1; --j) {while (top > 0 && cmin[stk[top]] > cmin[j]) top -= 1;if (top == 0) R = m;else R = stk[top] - 1;stk[++top] = j;ans = max(ans, 1ll * (pre[R] - pre[L[j] - 1]) * cmin[j]);}}}cout << ans << "\n";return 0;
}

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

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

相关文章

用Python和开源NLP工具库开发一个小型聊天机器人原型

为了创建一个小型聊天机器人原型&#xff0c;我们可以使用Python和开源NLP工具库spaCy。在本示例中&#xff0c;我们将演示如何创建一个简单的问答聊天机器人&#xff0c;它可以回答一些基本问题。 首先&#xff0c;确保您已经安装了Python和spaCy&#xff0c;然后下载spaCy的…

VUE3页面截取部署后的二级目录地址

用vue3开发了一个项目&#xff0c;只能部署在根目录&#xff0c;不能加二级目录&#xff0c;后来网上找了解决方案&#xff0c;在vite.config.ts中增加base: ./,配置解决问题&#xff0c;参考下图&#xff1a; 但部署后要获取部署的二级目录地址切遇到问题&#xff0c;后来想了…

数字化教育的未来:数字孪生技术助力校园创新

随着科技的飞速发展&#xff0c;智慧校园成为教育领域的新宠。数字孪生技术&#xff0c;作为一项新兴技术&#xff0c;正日益深刻地影响着校园的运营和管理。它为学校提供了前所未有的工具和资源&#xff0c;使校园管理更加高效、智能化。本文将探讨数字孪生技术如何助力智慧校…

深度学习中的激活函数

给定一个线性变换可以把x的值映射到一条直线上&#xff0c;如下图 输出结果就是y1w1xb1 如果y1经过一个线性变换得到一个y2&#xff0c;那么x和y2的关系是什么&#xff1f; 答案&#xff0c;毫无疑问是一条直线&#xff0c;不管如何的线性变换&#xff0c;依旧是一个线性的问…

【网路安全 --- Linux,window常用命令】网络安全领域,Linux和Windows常用命令,记住这些就够了,收藏起来学习吧!!

一&#xff0c;Linux 1-1 重要文件目录 1-1-1 系统运行级别 /etc/inittab 1-1-2 开机启动配置文件 /etc/rc.local /etc/rc.d/rc[0~6].d## 当我们需要开机启动自己的脚本时&#xff0c;只需要将可执行脚本丢在 /etc/init.d 目录下&#xff0c;然后在 /etc/rc.d/rc*.d 中建…

2022年最新Python大数据之Python基础【五】(字典)

文章目录 9、字典的定义10、字典的增加11、字典的删除12、字典的修改13、字典的查询14、字典的遍历 9、字典的定义 格式&#xff1a;变量 {key1 : value1, key2: value2…}空字典定义&#xff1a; {}dict&#xff08;&#xff09; 字典中键不能重复&#xff0c;是唯一的&…

Mysql的安装配置教程(详细)

MySQL是一种流行的关系型数据库管理系统&#xff0c;用于存储和管理数据。下面是MySQL的安装和配置教程的详细步骤&#xff1a; 下载MySQL安装程序&#xff1a; 访问MySQL官方网站&#xff08;https://dev.mysql.com/downloads/mysql/&#xff09;。选择适合你操作系统的版本&a…

分享关于msvcp110dll丢失的5种不同解决方法

今天我要和大家分享的主题是&#xff1a;msvcp110dll丢失的5种不同解决方法。我们都知道&#xff0c;在电脑使用过程中&#xff0c;经常会遇到一些棘手的问题&#xff0c;比如msvcp110.dll丢失。那么&#xff0c;这个文件丢失到底是什么意思呢&#xff1f;接下来&#xff0c;我…

CentOS 7下JumpServer安装及配置(超详细版)

前言 Jumpserver是一种用于访问和管理远程设备的Web应用程序&#xff0c;通常用于对服务器进行安全访问。它基于SSH协议&#xff0c;提供了一个安全和可管理的环境来管理SSH访问。Jumpserver是基于Python开发的一款开源工具&#xff0c;其提供了强大的访问控制功能&#xff0c;…

CakePHP 3.x/4.x反序列化RCE链

最近网上公开了cakephp一些反序列化链的细节&#xff0c;但是没有公开poc&#xff0c;并且网上关于cakephp的反序列化链比较少&#xff0c;于是自己跟一下 &#xff0c;构造pop链。 CakePHP简介 CakePHP是一个运用了诸如ActiveRecord、Association Data Mapping、Front Contr…

物联网AI MicroPython传感器学习 之 HX711称重传感器

学物联网&#xff0c;来万物简单IoT物联网&#xff01;&#xff01; 一、产品简介 下图是一款量程为5kg的称重传感器&#xff0c;采用悬臂梁方式安装。传感器主体结构是一个开孔金属条&#xff0c;金属条上下表面各贴有两个应变电阻&#xff0c;当金属条受力发生变形时时&…

C# 中大小端Endian

大小端可以找下资料很多&#xff0c;都是文字的。我每次遇到大小端问题就会搜资料&#xff0c;总是记不住。我自己用用图片记录一下&#xff0c;以备直观的从内存中看到。 在C#中可以用BitConverter.IsLittleEndian来查询。 几个数字在内存中 我们来观察一下&#xff0c;我的…

数据仓库Hive(林子雨课程慕课)

文章目录 9.数据仓库Hive9.1 数据仓库的概念9.2 Hive简介9.3 SQL语句转换为MapReduce作业的基本原理9.4 Impla9.4.1 Impala简介9.4.2 Impala系统架构9.4.3 Impala查询执行过程9.4.4 Impala与Hive的比较 9.5 Hive的安装和基本操作9.5.1 Hive安装9.5.2 Hive基本操作 9.数据仓库Hi…

uniapp 在android手机上运行tab栏页面跳转问题

【问题描述】&#xff1a; 使用uniapp写的项目&#xff0c;在tab页面&#xff0c;无论使用哪种方式的跳转&#xff0c;只要是在url后面拼接参数&#xff0c;在打包成apk文件后&#xff0c;在手机上面安装使用&#xff0c;都是获取不到susIndex参数的&#xff0c;而在浏览器上面…

【【萌新的SOC学习之SD卡读写TXT文本实验】】

萌新的SOC学习之SD卡读写TXT文本实验 SD卡 Secure Digital Card SD卡的引脚定义 我们会用的数据脚就这几个 对于我们FPGA 其实更会倾向于选择 SPI的功能 而TF卡相对于SD卡的区别在于 SD卡只有一个电源地 这里相对于原本的SPI多了一个CD引脚 CD信号是相当于一个卡检测…

某医疗机构:建立S-SDLC安全开发流程,保障医疗前沿科技应用高质量发展

某医疗机构是头部资本集团旗下专注大健康领域战略性投资与运营的实业公司&#xff0c;市场规模超300亿。该医疗机构已完成数字赋能&#xff0c;形成了标准化、专业化、数字化的疾病和健康管理体系&#xff0c;将进一步规划战略方向&#xff0c;为人工智能纳米技术、高温超导、生…

虹科科技 | 探索CAN通信世界:PCAN-Explorer 6软件的功能与应用

CAN&#xff08;Controller Area Network&#xff09;总线是一种广泛应用于汽车和工业领域的通信协议&#xff0c;用于实时数据传输和设备之间的通信。而虹科的PCAN-Explorer 6软件是一款功能强大的CAN总线分析工具&#xff0c;为开发人员提供了丰富的功能和灵活性。本文将重点…

PBA.客户需求分析 需求管理

一、客户需求分析 1 需求的三个层次: Requirement/Wants/Pains 大部分人认为&#xff0c;产品满足不了客户需要&#xff0c;是因为客户告知的需求是错误的&#xff0c;这听起来有一些道理&#xff0c;却没有任何意义。不同角色对于需求的理解是不一样的。在客户的需求和厂家的…

风电光伏混合储能功率小波包分解、平抑前后波动性分析、容量配置、频谱分析、并网功率波动分析(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

UE4和C++ 开发-UE4怎么删除C++类

1 关闭visual stdio&#xff0c;关闭UE4引擎。 2 打开你的项目文件夹。找到你要删除的.h,.cpp文件删除。 3、删除Binaries文件夹。 4 右击.uproiect文件&#xff0c;点击Generate Visual Studio project files. 5 双击.uproiect文件,忽略警告打开就看到已经删除了想要删除的C类…