POJ3494 - Largest Submatrix of All 1’s (单调栈)

无线通信入门:3种键控法(ASK/FSK/PSK)原理图解与实战对比 本文深入解析无线通信中ASK、FSK、PSK三种基础键控法的原理与应用。通过图解对比,阐明幅移键控(ASK)简单低成本但抗干扰差,频移键控(FSK)稳健且应用广泛,相移键控(PSK)高效但复杂。文章结合实战场景,为物联网和嵌入式开发者在选型时提供关键指导,帮助平衡数据速率、成本、功耗与抗干扰需求。 阅读详情

题目链接:

http://poj.org/problem?id=3494


题目大意:

给定一个矩阵,里面只包含 0 和 1,求这个矩阵里所有子矩阵中值最大是多少(即矩阵内部所有的 0,1 的和)。


解题过程:

由于前几天刚做完一个单调栈的题,然后看到这个题就马上往那方面想了,但是还是不太熟练,对着模板才敲出来。


题目分析:

  • 首先处理一下数据,开一个数组,数组 data[i][j] 代表着以第 i 行,第 j 列结尾的连续 1 的个数(自上到下的连续,例如data[0][j], data[1][j]都是 1 ,那么 data[0][j] = 1, data[1][j] = 2)。
  • 这样我枚举每一行,对于每一行,问题转化成了一个典型的单调栈问题,求出所有行的最大值即是答案。

  • 这里说一下单调栈,在本题中,如果栈为空或者当前元素直接入栈,否则将栈顶元素出栈并计算栈顶元素的面积。

    • 这里的面积是计算以栈顶元素为最大高度的矩阵面积,那么栈顶元素最左边可到达的是栈中上一个比他小的数(如果栈为空就是左边界了),最右可到达是即将要入栈的数(因为比他小),这里不直接那栈顶元素的下标和当前元素的下标计算是因为可能有大小相同的元素。

    • 最后栈如果不为空的话要依次出栈并计算大小,计算大小的时候以栈中上一个比他小的数为最左可到达的地方(如果栈为空就是左边界了) ,最右可到达的是有边界,因为每一个栈中的数,都比右边所有的数要小。

AC代码:

#include<queue>
#include<cstdio>
#include<stack>
using namespace std;

const int MAX = 2000+100;

int data[MAX][MAX];

int main() {
    int m, n;
    while (~scanf("%d %d", &m, &n)) {
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                scanf("%d", &data[i][j]);
                if (data[i][j] != 0 && i != 0)
                    data[i][j] += data[i-1][j];
            }
        }

        int ans = 0;
        for (int i = 0; i < m; i++) {
            stack<int> ss;
            for (int j = 0; j < n; j++) {
                if (ss.empty() || data[i][j] > data[i][ss.top()]) {
                    ss.push(j);
                } else {
                    int start = ss.top();
                    ss.pop();
                    int width = ss.empty() ? j : j - ss.top()-1;
                    ans = max(ans, data[i][start]*width);
                    j--;
                }
            }
            while (!ss.empty()) {
                int start = ss.top();
                ss.pop();
                int width = ss.empty() ? n : n - ss.top() - 1;
                ans = max(ans, data[i][start]*width);
            }
        }
        printf("%d\n", ans);
    }
}
ensp企业网综合实验(课程设计) 使用MSTP+VRRP技术实现负载均衡以及增加网络的可靠性;出口配置napt;所有用户均为自动获取IP地址; 阅读详情

相关推荐

【sap2000】部分模型通过.s2k文件合并模型generating a global model through partial models by .s2k text file

现在需要通过选项File → Import → SAP2000 .s2k Text File → Add to existing model(如果使用其中一个部分模型作为基础)或New model(如果使用新文件)添加部分模型,并使用以下导入选项。模型A(阶段1/5) Model A (Phase 1/5)模型B(阶段2/5) Model B (Phase 2/5)模型C(阶段3/5) Model C (Phase 3/5)模型E(阶段5/5) Model E (Phase 5/5)

hmywillstronger的博客 1748

POJ3494 Largest Submatrix of All 1’s[单调栈]

B - Largest Submatrix of All 1’s Time Limit:5000MS     Memory Limit:131072KB     64bit IO Format:%I64d & %I64u Submit Status Description Given a m-by-n (0,1)-matrix, of all its subma

ControlBear的博客 648

AI工程化之生成式UI & A2UI(二)

本文介绍了生成式UI框架A2UI的架构设计与核心实现。项目采用AI协作开发模式,通过ATDD(AI驱动的测试驱动开发)确保代码质量。前端SDK基于zustand实现框架无关的状态管理,包含协议解析器、存储管理、渲染器等核心模块。重点展示了基础store构建、A2UI协议解析器的实现过程,包括mock数据准备、测试用例生成和可视化调试。项目采用monorepo管理,利用vite实现高效开发构建。整个系统设计遵循模块化原则,通过清晰的接口定义实现各组件解耦,为后续功能扩展打下基础。

qq_34306228的博客 405

【POJ 3494】Largest Submatrix of All 1‘s【二维の单调栈】

所有1的最大子矩阵 时限: 5000MS 内存限制: 131072K 案件期限: 2000MS 描述 给定一个m × n(0,1)矩阵,所有1的所有子矩阵中哪个最大?通过最大的,我们是指子矩阵拥有最多的元素。 输入项 输入包含多个测试用例。每个测试用例始于米和Ñ(1≤ 米,Ñ上线≤2000)。然后,按行优先顺序在每行具有n个数字的m行上出现(0,1)-矩阵的元素。达到EOF后,输入结束。 输出量 对于每个测试用例,输出一行,其中包含所有1的最大子矩阵的元素数量。如果给定的矩阵全为0,则输出0。 样本输入

绫 405

WSL2+Docker+Ollama:解锁Windows本地GPU加速运行DeepSeek-R1模型

本文详细介绍了在Windows系统上,通过WSL2、Docker和Ollama的组合方案,实现本地GPU加速运行DeepSeek-R1模型的全过程。该方案解决了Windows环境下Ollama默认无法调用NVIDIA显卡的痛点,通过配置Docker的GPU支持,强制将计算任务分配给GPU,从而显著提升文本生成速度与效率,为开发者提供了一个便捷的本地AI测试环境。

weixin_28452161的博客 356

【VAX 小番茄安装详细步骤】

本文详细介绍了在VS2022环境下安装Visual Assist X(番茄助手)的步骤及常见问题解决方案。主要内容包括:安装前的兼容性设置(需修改为Windows7兼容模式)、安装流程(卸载旧版本、勾选对应VS版本、替换关键dll文件)以及常见问题处理(如安装失败、工具栏图标缺失等)。文章提供了完整的下载链接和操作截图,特别强调了安装失败后的清理方法(注册表、安装目录和残余文件删除)。最后给出了安装成功后的测试运行指引。

qq_23962581的博客 1712

POJ-3494 Largest Submatrix of All 1’s(单调栈)

第一眼看反应是DP,以前做过求最大的正方形的,立刻爽快的交了一发,WA,仔细一看,本题是求最大的矩形,然后就不知道DP怎么做了,但是有影响以前听过DP的解法 只好按照题解的单调栈做法写(解法太巧妙了) 对每一行进行类似HDU-1506(POJ-2599)的单调栈做法,小矩形的高度h[j]就是从该行开始往上的最大的连续1的个数,进行完最后一行后,即可求得最大的矩形

idealism_xxm的专栏 1721

Multisim 14.0实战:从零搭建可调幅多波形信号发生器(附仿真文件)

本文详细介绍了如何在Multisim 14.0中从零搭建一个可调幅多波形信号发生器,涵盖方波、三角波和正弦波的生成原理与实现步骤。通过核心电路架构解析、关键参数设计及Multisim实战操作,帮助电子工程学习者和硬件工程师掌握信号发生器的设计与调试技巧,并提供仿真文件供实践验证。

nokia的博客 1073

【poj3494】【单调栈】Largest Submatrix of All 1’s

Description Given a m-by-n (0,1)-matrix, of all its submatrices of all 1’s which is the largest? By largest we mean that the submatrix has the most elements. Input The input contains multiple test cases. Each test case begins with m and n (1 ≤ m, n ≤ 2000)

蒟蒻的OI路 226

EtherCAT主站教程3--适配伺服驱动器(模式配置)

目前通用的伺服驱动器的位置模式、速度模式以及其他模式是伺服系统中常见的控制模式,切换这些模式通常需要根据具体的伺服驱动器型号和控制协议(如EtherCAT、CANopen、Modbus等)进行配置。以下是这些模式的概述及切换方法的一般性指导:协议规范中,一共有以下几种模式:其中模式1、3、6对于比较常用,也更容易上手。

weixin_52626887的博客 793

【Unity小游戏】整整一个周末写一款《皇室战争 玩法》 的 即时战斗类 游戏Demo。两万多字游戏制作过程+解析

Unity游戏制作,本篇文章介绍了复刻皇室战争玩法的一个自制小游戏,共有该游戏的两万字教程加制作过程,欢迎品尝! 世界上没有绝对的公平,如果我们起点就比别人第一步,那就更需要比别人努力了。

努力前行,总会成为自己心中的那道光 12万+

【poj3494】Largest Submatrix of All 1’s【单调栈】

题目大意 给出一个只有0和1的n∗mn*mn∗m矩阵,求出面积最大的只含有1的子矩阵。 原题&样例 分析 这题就是例题2的升级版,把一维变成二维了。 这题用了压行的思想,把多行压成一行。我们可以按列求高度,将每个点的高度赋值到数组里 接下来,我们用两个循环来做,一个枚举行,一个枚举列,在两者之间做单调栈,弹出时记录一下它能到达最左边和最右边的编号,在求面积时和当前高度相乘更新答案。 上代码 #include<iostream> #include<cstdio> #includ

ssllyr 196

解决com.alibaba.druid.pool.GetConnectionTimeoutException: wait millis 60027, active 20, maxActive 20错误

全网详细解决com.alibaba.druid.pool.GetConnectionTimeoutException: wait millis 60027, active 20, maxActive 20, creating 0, createErrorCount 24的错误

念兮为美 416

Largest Submatrix of All 1’s(POJ 3494) 单调栈

来自《挑战程序设计竞赛》 1.题目原文 http://poj.org/problem?id=3494 Largest Submatrix of All 1’s Time Limit: 5000MS   Memory Limit: 131072K Total Submissions: 5885   Accepted: 2219 Case

相思作坊半世离殇的博客 534

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

单调栈 Largest Submatrix of All 1’s poj3494

单调栈的运用 求最大的全为1的子矩阵,可转化为,对于每一行,转化为直方表的形式然后利用单调栈求解 比如: 对于矩阵 0 0 1 1 //第一行对应的直方图就是0,0,2,2 1 1 1 1//同理为1 1 1 1 然后对于每个直方图求最大矩阵 参照http://www.cnblogs.com/felixfang/p/3676193.html 解法 /* ID: meixiny1 P

meixiuxiudd的博客 488

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

POJ3494 Largest Submatrix of All 1’s【单调栈】

对每一行进行考虑,均可以视为一个柱状图, 于是问题转化为为求柱状图的最大矩形面积, 这可以利用单调栈来处理, 利用单调栈在 O(m)O(m)O(m) 时间内处理出所有元素左边 /// 右边第一个比其大 /// 小的元素位置。 在利用单调栈处理之前, 还需要求出 每个位置的 “柱高”, 其实只需要 对每一列进行遍历, 然后从上到下依次编号即可。 总的时间复杂度为 O(n⋅m)O(n⋅m)O(n⋅m)。 代码: #include<algorithm> #include<iostream&gt.

JA_yichao欢迎你 cnblogs账号:https://www.cnblogs.com/mayichao/ 174

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

POJ 3494 Largest Submatrix of All 1’s 单调队列||单调栈

POJ 3494 Largest Submatrix of All 1’s Description Given a m-by-n (0,1)-matrix, of all its submatrices of all 1’s which is the largest? By largest we mean that the submatrix has the most ...

248

【POJ.3494】Largest Submatrix of All 1’s(单调栈)

Largest Submatrix of All 1’s Description Given a m-by-n (0,1)-matrix, of all its submatrices of all 1’s which is the largest? By largest we mean that the submatrix has the most elements. 给定一个 m-by-n (0,1)-矩阵,它的所有子矩阵中,哪个是最大的? 最大的意思是子矩阵的元素最多。 Input The input

我很菜的好吧 471

【POJ 3494】Largest Submatrix of All 1’s【单调栈】

Time Limit: 5000MS Memory Limit: 131072K Total Submissions: 10513 Accepted: 3703 Case Time Limit: 2000MS Description Given a m-by-n (0,1)-matrix, of all its submatrices of all 1’s which is the largest? By largest we mean that the submatrix has the most

在人间贩卖声音 120

POJ3494 - Largest Submatrix of All 1’s - 二维单调栈

1.题目描述: Largest Submatrix of All 1’s Time Limit: 5000MS   Memory Limit: 131072K Total Submissions: 6398   Accepted: 2365 Case Time Limit: 2000MS Description G

终有绿洲摇曳在沙漠 515

POJ 3494 Largest Submatrix of All 1’s(单调栈)

单调栈 题目意思: 有一个 0 和 1 数字构成的矩阵,要求全是数字1构成的子矩阵的最大面积。 题目类似于 POJ 2559。 本题要点: 1、算法竞赛进阶指南,54页,单调栈算法,依次扫描每一行即可。 2、用数组 h[i][j]记录每一行的某一列对应大高度。 #include <cstdio> #include <cstring> #include <iostream> using namespace std; const int MaxN = 2010; int h[

qq_38232157的博客 144

POJ3494 Largest Submatrix of All 1’s【单调栈 01矩阵中最大的1矩形】

Largest Submatrix of All 1’s Time Limit:5000MS Memory Limit:131072K Total Submissions:8502 Accepted:3075 Case Time Limit:2000MS Description Given am-by-n(0,1)-matrix, of...

逐梦者 753

POJ-3494 Largest Submatrix of All 1’s (单调栈)

Largest Submatrix of All 1’s Time Limit:5000MS Memory Limit:131072K Total Submissions:8551 Accepted:3089 Case Time Limit:2000MS Description Given am-by-n(...

weixin_30673715的博客 137

POJ-3494-Largest Submatrix of All 1’s-还是单调栈

给出一个n*m的 矩阵 只含“0” 、“1”, 求出最大的一个全是1的子矩阵 一开始在想用什么奇淫技巧做。。。后来发现暴力做n次像POJ 2796的单调栈操作就好 预处理 h[i][j]为点【i】【j】处往上数连续的“1”的个数 那么对第i行做一次 得到的是  第i行为底边 高度为h[i][j]   的一个最大面积的矩形(面积为1的个数)  那么只要对每一行做一次,就得到

缺氧 599

(POJ 3494)Largest Submatrix of All 1’s (DP、单调栈)

思路求最大子矩阵问题相当于对每一行求最大矩形问题问题,可以用单调栈处理。 因为子矩阵必有开始行和结束行,相当于枚举开始行,然后通过histogram的最大矩形问题保证到结束行为止都是1且最宽代码用自带的栈会超时(因为我用了结构体和scanf的关系)#include <iostream> #include <cstdio> #include <algorithm> #include <cstring

Martin的博客 1034
上一篇: POJ2155 - Matrix (二维树状数组)
下一篇: SDUTOJ - 2781 二分练习(二分)
ACM_Fish
博客等级 码龄10年 69粉丝 76原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值