题目描述

给定一个包含整数的二维矩阵,子矩形是位于整个阵列内的任何大小为1 * 1或更大的连续子阵列。

矩形的总和是该矩形中所有元素的总和。

在这个问题中,具有最大和的子矩形被称为最大子矩形。

例如,下列数组:

0 -2 -7 0
9 2 -6 2
-4 1 -4 1
-1 8 0 -2
其最大子矩形为:

9 2
-4 1
-1 8
它拥有最大和15。

输入格式

输入中将包含一个N*N的整数数组。
第一行只输入一个整数N,表示方形二维数组的大小。
从第二行开始,输入由空格和换行符隔开的N2个整数,它们即为二维数组中的N2个元素,输入顺序从二维数组的第一行开始向下逐行输入,同一行数据从左向右逐个输入。
数组中的数字会保持在[-127,127]的范围内。

输出格式

输出一个整数,代表最大子矩形的总和。

数据范围

1≤N≤100

输入样例:

4
0 -2 -7 0 9 2 -6 2
-4 1 -4 1 -1

8 0 -2

输出样例:

15

题解: 前缀和 + 贪心:
首先我们容易想到,可以枚举矩阵的左上角(x1, y1)和右下角(x2, y2) ,然后通过二维前缀和算出矩阵和,这样就可以确定我们所需要的矩阵,但是时间复杂度是O(n4),这样的复杂度太大了,我们无法解决.所以我们可以换一种思想,贪心处理.问题是我们怎么贪心了, 大致可以这样大力贪心:

我们可以将二维求最大子矩阵联想到一维的求最大子矩阵和的方式,可以先求出每一列的前缀和,
然后俩个for循环枚举上边界和下边界,在用一个for循环来枚举这个区间内的每一列,因为我们已经求出每一列的前缀和了,所以这俩个边界之间的每一列之和我们是知道的, 所以就可以用一维的方法来做了。

#include<iostream>
#include<algorithm>
using namespace std;
int a[110][110];
int main()
{int n;cin >> n;for(int i = 1; i <= n; i++)for(int j = 1; j <= n; j++){cin >> a[i][j];a[i][j] += a[i - 1][j];  //求出每一列的前缀和}int Max = -1e9;for(int i = 1; i <= n; i++){for(int j = i; j <= n; j++){int now = 0;for(int k = 1; k <= n; k++){now = max(now, 0) + a[j][k] - a[i - 1][k];  //如果now小于0了,如果加上的话数值会变小,所以干脆就不用加了Max = max(Max, now);}}}cout << Max << endl;return 0;
}

最大子矩阵(前缀和+贪心)相关推荐

  1. Maximize The Beautiful Value (前缀和贪心)

    Maximize The Beautiful Value (前缀和&贪心) 题目传送门 题意:给定长度为n不递减序列,求操作一次使其F[n]最大. #include<bits/stdc+ ...

  2. 8-详解前缀树贪心算法N皇后问题

    一.何为前缀树?如何生成前缀树? 经典的前缀树:点上没有数据,如果有路就复用,没有路就新建. 前缀树点的结构: pass:代表这个点经过了多少次,根节点的pass代表有多少个字符串前缀为空,或者一共加 ...

  3. 灵能传输(前缀和 + 贪心)

    1248. 灵能传输 灵能传输 思路 1.观察发现每次对一个圣堂武士aia_{i}ai​一次灵能传输都是对前缀和Si−1S_{i - 1}Si−1​,SiS_{i}Si​得一次交换 2.问题转换为ma ...

  4. 算法补天系列之——前缀树+贪心算法

    介绍前缀树 经典的前缀树,字符都是在路上的,节点是为了边的存在而存在的,有路就可以复用. 那么前缀树对应的数据结构是什么样的呢? 对于节点构建结构,设置一个int pass(表示路径途径这个节点的次数 ...

  5. acwing 105 七夕祭 中位数 + 前缀和 贪心

    七夕节因牛郎织女的传说而被扣上了「情人节」的帽子. 于是TYVJ今年举办了一次线下七夕祭. Vani同学今年成功邀请到了cl同学陪他来共度七夕,于是他们决定去TYVJ七夕祭游玩. TYVJ七夕祭和11 ...

  6. codeforces1041D Glider(二分/前缀和/贪心)

    题目链接:codeforces 1041D 题目思路: 显然,为了尽可能覆盖多的区间,起点一定是某段区间的左端点,故枚举左端点,二分查找终点,下降的高度用前缀和记录即可.具体参见代码. 参考代码: # ...

  7. 灵能传输(前缀和+贪心)

    输入样例1: 3 3 5 -2 3 4 0 0 0 0 3 1 2 3 输出样例1: 3 0 3 输入样例2: 3 4 -1 -2 -3 7 4 2 3 4 -8 5 -1 -1 6 -1 -1 输出 ...

  8. D. The Best Vacation(贪心+前缀和+二分)

    The Best Vacation 思路 前缀和加贪心 贪心:我们的结尾点一定是在某一个月的最后一天. 贪心部分证明:我们选定两组数 A=an−2,an−1,an,b1,b2,b3--bn−2,bn− ...

  9. 【算法】差分与前缀和 算法详解+例题剖析

    目录 一.前缀和 二. 差分思想 1.静态数组的区间求和问题 2.静态维护区间加等差数列的求和问题 三.二维前缀和 二维前缀和例题P2280 [HNOI2003]激光炸弹 四.例题 例题一:差分+前缀 ...

最新文章

  1. oracle存储过程备份,利用ORACLE存储过程与JOB结合实现对数据表自动备份
  2. windows 安装 php memcached,Windows安装配置php+memcached的方法
  3. 给大学生分享一下我的编程人生
  4. IE或Chrome浏览器玩Xbox游戏能实现吗
  5. 查看表字段信息 sql,mysql,oracle
  6. 常用于解决放缩问题的基本不等式及其几何直观证明
  7. python数据分析——如何用python连接远程数据库
  8. code css怎么拿不到div_哈登和威少再怎么努力,也追不上杜兰特,因为刷子是拿不到冠军的...
  9. 第2章[2.4] Ext JS的类与类体系
  10. CDH页面中Oozie的调度告警邮箱设置
  11. 便利店小程序需要服务器吗,便利店开发小程序的功能
  12. 台达A2/B2伺服电机编码器改功率软件 台达A2/B2伺服电机编码修改, 用于更换编码器写匹配电机参数
  13. C++11创建线程的三种方式
  14. java.lang.NoClassDefFoundError: org/jaxen/JaxenException
  15. 高大上的cmd命令行来袭!颜值与内涵兼备
  16. 计算机更改tcp端口代码,windows如何使用脚本把一个网络打印机的端口从WSD修改成TCP/IP?...
  17. Android 隐藏状态栏
  18. 《C# 从现象到本质》出版,免费送书10本
  19. 【云原生 | Kubernetes 系列】1个POD2个container实现Wordpress K8s部署
  20. GYM 101350 H. Mirrored String I

热门文章

  1. 科普:为什么 String hashCode 方法选择数字31作为乘子
  2. Kafka:ZK+Kafka+Spark Streaming集群环境搭建(十九)ES6.2.2 安装Ik中文分词器
  3. 不使用额外空间交换2个数据的源代码
  4. SublimeText3 插件的使用和本身的配置
  5. hadoop错误总结
  6. Nuget官方包源问题
  7. mplayer error opening/initializing the selected video_out (-vo) device
  8. 【笔记目录】南邮(通达)计算机专业基础
  9. 【实习之T100开发】T100 P处理开发流程
  10. 渗透测试攻击(二)——wireshark过滤数据包语法详解