【错题集-编程题】最大子矩阵(二维前缀和)

牛客对应题目链接:最大子矩阵_牛客题霸_牛客网 (nowcoder.com)


一、分析题目

⼆维前缀和矩阵 的应用。
  1. 初始化⼆维前缀和矩阵。
  2. 枚举所有的子矩阵,求出最大子矩阵。

这道题的输入规模最大为 100,用动态规划可以做到 O(n^3)。

下面的做法虽然是暴力思路,时间复杂度为 O(n^4),但是思路简单、代码简单。
枚举矩阵中每两两个坐标,用前缀和优化求子矩阵的过程。只要给出两个左上角,和右上角的坐标,就能求子矩阵。

  • 求和:s[i][j] = s[i-1][j] + s[i][j-1] - s[i-1][j-1] + a[i][j];
  • 求子矩阵(a, b, c, d):s[c][d] - s[a-1][d] - s[c][b-1] + s[a-1][b-1]; 

如何枚举左右的子矩阵?

for(0 ~ n-1) -> x1

        for(0 ~ m-1) -> y1

                for(x1 ~ n-1) -> x2

                        for(y1 ~ m-1) -> y2


如何计算矩阵中所有元素的和?

二位前缀和:

  1. 初始化二维 dp 表:dp[i][j] = dp[i-1][j] + dp[i][j-1] - dp[i-1][j-1] + arr[i][j]
  2. 使用二维 dp 表:dp[x2][y2] - dp[x1-1][y2] - dp[x2][y1-1] + dp[x1-1][y1-1]

二、代码

//值得学习的代码
#include <iostream>
using namespace std;const int N = 110;int n;
int dp[N][N];int main()
{int x;cin >> n;for(int i = 1; i <= n; i++){for(int j = 1; j <= n; j++){cin >> x;dp[i][j] = dp[i - 1][j] + dp[i][j - 1] - dp[i - 1][j - 1] + x;}}int ret = -127 * N;for(int x1 = 1; x1 <= n; x1++){for(int y1 = 1; y1 <= n; y1++){for(int x2 = x1; x2 <= n; x2++){for(int y2 = y1; y2 <= n; y2++){ret = max(ret, dp[x2][y2] - dp[x1 - 1][y2] - dp[x2][y1 - 1] + dp[x1 - 1][y1 - 1]);}}}}cout << ret << endl;return 0;
}

三、反思与改进

统计前缀和的思路是没有错的,但是在最后遍历求最大前置和子矩阵时记错了公式(应该画图的,这样就可以一眼看出错误了)。前缀和这一块的基础模板题需要再回顾一下。

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

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

相关文章

C语言/数据结构——(链表的回文结构)

一.前言 今天在牛客网上刷到了一道链表题——链表的回文结构https://www.nowcoder.com/practice/d281619e4b3e4a60a2cc66ea32855bfa?&#xff0c;巧合的是它的解题思路恰好是我们一起分享过两道链表题的汇总。这两道题分别是反转链表和链表的中间节点。废话不多数&#xff0c…

回炉重造java----单列集合(List,Set)

体系结构: 集合主要分为两种&#xff0c;单列集合collection和双列集合Map&#xff0c;区别在于单列集合一次插入一条数据&#xff0c;而双列的一次插入类似于key-value的形式 单列集合collection 注:红色的表示是接口&#xff0c;蓝色的是实现类 ①操作功能: 增加: add()&am…

Java中的maven的安装和配置

maven的作用 依赖管理 方便快捷的管理项目依赖的资源&#xff0c;避免版本冲突问题 统一项目管理 提供标准&#xff0c;统一的项目结构 项目构建 标准跨平台&#xff08;Linux、windows、MacOS&#xff09;的自动化项目构建方式 maven的安装和配置 在maven官网下载maven Ma…

嵌入式学习<2>:EXTI、ADC、NVIC和AFIO

嵌入式学习_part2 本部分笔记用于学习记录&#xff0c;笔记源头 >>b站江科大_STM32入门教程_EXTI EXTI、ADC、NVIC和AFIO 开发环境&#xff1a;keil MDK、STM32F103C8T6 1 &#xff09;EXTI STM32F10xxx参考手册&#xff08;中文&#xff09;-> 中断与事件 ->…

文本三剑客grep与正则表达式、元字符

正则表达式 正则表达式又称为正规表达式、常规表达式、在代码中常简写为regex、regex或RE。正则表达式是使用单个字符串来描述、匹配一系列符合某个句法规则的字符串&#xff0c;简单来说&#xff0c;是一种匹配字符串的方法&#xff0c;通过一些特殊符号&#xff0c;实现快速查…

OPC-UA open62541 C++测试代码

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的&#xff0c;可以在任何平台上使用。 这是之前写的open62541测试代码…

Mac电脑安装打开APP显示问题已损坏 问题解决

当MAC电脑安装完软件打开时&#xff0c;显示文件已损坏&#xff0c;无法打开。搜了很多教程终于找到解决方案&#xff0c;记录下方便以后再用。 我的mac电脑是intel芯片的&#xff0c;如果你遇到这个问题&#xff0c;可以参考我的这个方案。 1.首先当打开软件后出现 “xx软件已…

【话题】你用过最好用的AI工具有那些

大家好&#xff0c;我是全栈小5&#xff0c;欢迎阅读小5的系列文章&#xff0c;这是《话题》系列文章 目录 背景一、C知道二、CSDN工具集三、AI工具的普及与受欢迎程度四、AI工具的实际应用与影响五、总结与展望文章推荐 背景 探讨人们在使用AI工具时&#xff0c;最喜欢的和认…

【多客陪玩】陪玩小程序源码APP+小程序+公众号开发 -源码交付,线下可爆改家政,整理师等功能

简述 随着电竞行业的快速发展&#xff0c;电竞陪玩APP正在逐渐成为用户在休闲娱乐时的首选。为了吸引用户和提高用户体验&#xff0c;电竞陪玩APP开发需要定制一些特色功能&#xff0c;并通过合适的盈利模式来获得收益。本文将为您介绍电竞陪玩APP开发需要定制的特色功能以及常…

【漏洞复现】RuvarOA协同办公平台 WorkFlow接口处存在SQL注入

免责声明&#xff1a;文章来源互联网收集整理&#xff0c;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;所产生的一切不良后果与文章作者无关。该…

大型外企都在用的邮件大附件系统,究竟哪里好?

外企的业务往来复杂&#xff0c;内部沟通频繁&#xff0c;且普遍采用邮件作为沟通方式&#xff0c;外企一般使用的邮件系统多种多样&#xff0c;但其中一些较为常见和广泛使用的包括Zoho Mail和Outlook等。 Outlook作为微软旗下的全球主流电子邮件服务提供商之一&#xff0c;也…

vscode 侧边栏资源管理器图标消失解决方案

偶然操作导致,侧边栏资源管理器图标消失,用着及其难受 尝试在网上找解决方案,找了很久都是说右键侧边栏啥啥的,无法解决 尝试删除setting.json 也无法解决 最终解决方案: 打开查看 ,命令面板 输入 View: Reset View Locations 回车就解决了