最大子矩阵问题

给定一个n*n(0<n<=120)的矩阵,

矩阵内元素有正有负,

请找到此矩阵的内部元素和最大的子矩阵

样例输入:

4

0 -2 -7  0

9  2 -6  2

-4  1 -4  1

-1  8  0 -2

样例输出:

15


  • 方法一:

    用二维前缀和维护然后一个个点遍历;

    时间复杂度:O(N4);

  • 方法二:

    DP

    先请明白这道题:

    最大子段和

    嗯?这不是一维的吗。和这道题有什么关系?

    请看这张图:

       这样就不难看出,我们只要枚举区间的左端点l和右端点r;
    
       同时用维护的二维前缀和求出每一段1,2,3,4,的值
    
       然后竖着来一遍最大字段和(O(N))就好了
    
       时间复杂度:O(N3)

代码:

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn=150;
int a[maxn][maxn];
int sum[maxn][maxn];
int line[maxn],c[maxn];
int l,r;
int n;
int solve()
{
int minx=min(0,line[1]),maxx=line[1];//
for(int i=2;i<=n;i++)
{
maxx=max(maxx,c[i]-minx);
minx=min(minx,c[i]);
}
return maxx;
}
int main()
{
int ans=-99999;
cin>>n;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
cin>>a[i][j];
sum[i][j]=sum[i][j-1]+a[i][j];
}
}
for(r=1;r<=n;r++)
{
for(l=1;l<=r;l++)
{
for(int i=1;i<=n;i++)
{
line[i]=sum[i][r]-sum[i][l]+a[i][l];
c[i]=c[i-1]+line[i];
}
ans=max(solve(),ans);
memset(c,0,sizeof(c));
memset(line,0,sizeof(line));
} }
cout<<ans<<endl;
return 0;
}

听课笔记--DP--最大子矩阵和的更多相关文章

  1. cs231n spring 2017 lecture9 CNN Architectures 听课笔记

    参考<deeplearning.ai 卷积神经网络 Week 2 听课笔记>. 1. AlexNet(Krizhevsky et al. 2012),8层网络. 学会计算每一层的输出的sh ...

  2. Day 5 笔记 dp动态规划

    Day 5 笔记 dp动态规划 一.动态规划的基本思路 就是用一些子状态来算出全局状态. 特点: 无后效性--狗熊掰棒子,所以滚动什么的最好了 可以分解性--每个大的状态可以分解成较小的步骤完成 dp ...

  3. bayaim_java_入门到精通_听课笔记bayaim_20181120

    ------------------java_入门到精通_听课笔记bayaim_20181120--------------------------------- Java的三种技术架构: JAVAE ...

  4. 孔浩老师的 Struts2 教程听课笔记(思维导图)

    最近有空重头学习了一遍孔浩老师的 Struts2 教程,重新写了一份听课笔记.后面常用 form 标签.服务器端验证.异常处理因为时间问题,没有来得及整理.后续我会抽空补上.最近忙着准备笔试.面试. ...

  5. hihocoder 1580 dp最大子矩阵和

    题意: 给出n*m的矩阵求最大子矩阵和,要求必须把矩阵中的某一个元素替换成p 代码: //求最大子矩阵和,容易想到压缩之后dp但是这道题要求必须替换一次p,必然优先替换最小的. //这样如果求得的结果 ...

  6. dp - 最大子矩阵和 - HDU 1081 To The Max

    To The Max Problem's Link: http://acm.hdu.edu.cn/showproblem.php?pid=1081 Mean: 求N*N数字矩阵的最大子矩阵和. ana ...

  7. ZOJ 1074 To the Max(DP 最大子矩阵和)

    To the Max Time Limit: 2 Seconds      Memory Limit: 65536 KB Problem Given a two-dimensional array o ...

  8. 「SDFZ听课笔记」二分图&&网络流

    二分图? 不存在奇环(长度为奇数的环)的图 节点能黑白染色,使得不存在同色图相连的图 这两个定义是等价哒. 直观而言,就是这样的图: 二分图有一些神奇的性质,让一些在一般图上复杂度飞天的问题可以在正常 ...

  9. LeetCode刷题笔记-DP算法-取数问题

    题目描述 (除数博弈论)爱丽丝和鲍勃一起玩游戏,他们轮流行动.爱丽丝先手开局. 最初,黑板上有一个数字 N .在每个玩家的回合,玩家需要执行以下操作: 选出任一 x,满足 0 < x < ...

随机推荐

  1. netty 聊天室

    https://blog.csdn.net/qq_37372007/article/details/82937584 使用netty实现一个多人聊天室--failed: Error during We ...

  2. Redis 单线程却能支撑高并发 - 简书 https://www.jianshu.com/p/2d293482f272

    小结: 1.在 I/O 多路复用模型中,最重要的函数调用就是 select,该方法的能够同时监控多个文件描述符的可读可写情况:2.Redis 服务采用 Reactor 的方式来实现文件事件处理器(每一 ...

  3. JAVA_SWT 事件的四种写法

    一:匿名内部类写法 在一个组件下加入以下语句 text.addMouseListener(new MouseAdapter(){ public void mouseDoubleClich(MouseE ...

  4. LeetCode_190. Reverse Bits

    190. Reverse Bits Easy Reverse bits of a given 32 bits unsigned integer. Example 1: Input: 000000101 ...

  5. MapReduce本地运行模式wordcount实例(附:MapReduce原理简析)

    1.      环境配置 a)        配置系统环境变量HADOOP_HOME b)        把hadoop.dll文件放到c:/windows/System32目录下 c)        ...

  6. 小程序下载canvas生成图片

    save_share_img:function(img){ var that = this; let { result } = that.data; getData.getData( "sa ...

  7. Jquery异步请求数据实例代码

    一.Jquery向aspx页面请求数据 前台页面JS代码: 代码如下: $("#Button1").bind("click", function () { $. ...

  8. Docker storage driver(十四)

    目录 一.storage driver 作用 1.Images and layers 2.Container and layers Copy-on-Write 3.Data volumes and t ...

  9. EM算法之不同的推导方法和自己的理解

    EM算法之不同的推导方法和自己的理解 一.前言 EM算法主要针对概率生成模型解决具有隐变量的混合模型的参数估计问题. 对于简单的模型,根据极大似然估计的方法可以直接得到解析解:可以在具有隐变量的复杂模 ...

  10. ios客户端浏览器样式加载失效问题

    最近线上测试中出现一个奇怪的问题,ios客户端浏览器样式加载失效. 从表象来看,同样的css,安卓手机上可以正常展示,但是到ios手机上首次进入页面就不能正常显示 这时候,我们首先会考虑是不是ios设 ...