最大子矩阵(前缀和+贪心)
题目描述
给定一个包含整数的二维矩阵,子矩形是位于整个阵列内的任何大小为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;
}
最大子矩阵(前缀和+贪心)相关推荐
- Maximize The Beautiful Value (前缀和贪心)
Maximize The Beautiful Value (前缀和&贪心) 题目传送门 题意:给定长度为n不递减序列,求操作一次使其F[n]最大. #include<bits/stdc+ ...
- 8-详解前缀树贪心算法N皇后问题
一.何为前缀树?如何生成前缀树? 经典的前缀树:点上没有数据,如果有路就复用,没有路就新建. 前缀树点的结构: pass:代表这个点经过了多少次,根节点的pass代表有多少个字符串前缀为空,或者一共加 ...
- 灵能传输(前缀和 + 贪心)
1248. 灵能传输 灵能传输 思路 1.观察发现每次对一个圣堂武士aia_{i}ai一次灵能传输都是对前缀和Si−1S_{i - 1}Si−1,SiS_{i}Si得一次交换 2.问题转换为ma ...
- 算法补天系列之——前缀树+贪心算法
介绍前缀树 经典的前缀树,字符都是在路上的,节点是为了边的存在而存在的,有路就可以复用. 那么前缀树对应的数据结构是什么样的呢? 对于节点构建结构,设置一个int pass(表示路径途径这个节点的次数 ...
- acwing 105 七夕祭 中位数 + 前缀和 贪心
七夕节因牛郎织女的传说而被扣上了「情人节」的帽子. 于是TYVJ今年举办了一次线下七夕祭. Vani同学今年成功邀请到了cl同学陪他来共度七夕,于是他们决定去TYVJ七夕祭游玩. TYVJ七夕祭和11 ...
- codeforces1041D Glider(二分/前缀和/贪心)
题目链接:codeforces 1041D 题目思路: 显然,为了尽可能覆盖多的区间,起点一定是某段区间的左端点,故枚举左端点,二分查找终点,下降的高度用前缀和记录即可.具体参见代码. 参考代码: # ...
- 灵能传输(前缀和+贪心)
输入样例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 输出 ...
- D. The Best Vacation(贪心+前缀和+二分)
The Best Vacation 思路 前缀和加贪心 贪心:我们的结尾点一定是在某一个月的最后一天. 贪心部分证明:我们选定两组数 A=an−2,an−1,an,b1,b2,b3--bn−2,bn− ...
- 【算法】差分与前缀和 算法详解+例题剖析
目录 一.前缀和 二. 差分思想 1.静态数组的区间求和问题 2.静态维护区间加等差数列的求和问题 三.二维前缀和 二维前缀和例题P2280 [HNOI2003]激光炸弹 四.例题 例题一:差分+前缀 ...
最新文章
- oracle存储过程备份,利用ORACLE存储过程与JOB结合实现对数据表自动备份
- windows 安装 php memcached,Windows安装配置php+memcached的方法
- 给大学生分享一下我的编程人生
- IE或Chrome浏览器玩Xbox游戏能实现吗
- 查看表字段信息 sql,mysql,oracle
- 常用于解决放缩问题的基本不等式及其几何直观证明
- python数据分析——如何用python连接远程数据库
- code css怎么拿不到div_哈登和威少再怎么努力,也追不上杜兰特,因为刷子是拿不到冠军的...
- 第2章[2.4] Ext JS的类与类体系
- CDH页面中Oozie的调度告警邮箱设置
- 便利店小程序需要服务器吗,便利店开发小程序的功能
- 台达A2/B2伺服电机编码器改功率软件 台达A2/B2伺服电机编码修改, 用于更换编码器写匹配电机参数
- C++11创建线程的三种方式
- java.lang.NoClassDefFoundError: org/jaxen/JaxenException
- 高大上的cmd命令行来袭!颜值与内涵兼备
- 计算机更改tcp端口代码,windows如何使用脚本把一个网络打印机的端口从WSD修改成TCP/IP?...
- Android 隐藏状态栏
- 《C# 从现象到本质》出版,免费送书10本
- 【云原生 | Kubernetes 系列】1个POD2个container实现Wordpress K8s部署
- GYM 101350 H. Mirrored String I
热门文章
- 科普:为什么 String hashCode 方法选择数字31作为乘子
- Kafka:ZK+Kafka+Spark Streaming集群环境搭建(十九)ES6.2.2 安装Ik中文分词器
- 不使用额外空间交换2个数据的源代码
- SublimeText3 插件的使用和本身的配置
- hadoop错误总结
- Nuget官方包源问题
- mplayer error opening/initializing the selected video_out (-vo) device
- 【笔记目录】南邮(通达)计算机专业基础
- 【实习之T100开发】T100 P处理开发流程
- 渗透测试攻击(二)——wireshark过滤数据包语法详解