最大子矩阵问题

给定一个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;
}

最新文章

  1. asp.net-枚举绑定控件
  2. CSS Bug
  3. sdut1598 周游列国【简单模拟题】
  4. PHP获取Cookie模拟登录CURL
  5. thymeleaf条件表达式
  6. 建议别买三星Gear:半电脑产品 设计糟糕
  7. Oracle 11g 完全卸载
  8. 转:MVC分页
  9. HDU 3081Marriage Match II(二分法+并检查集合+网络流量的最大流量)
  10. Redis数据结构及相应的命令
  11. Swift语言指南(二)--语言基础之注释和分号
  12. 如何高效实现扫描局域网IP、主机名、MAC和端口
  13. 微信小程序(一)基本知识初识别
  14. jQuery Ajax跨域问题简易解决方案
  15. Django ORM那些相关操作
  16. MyCP.java蓝墨云班课
  17. 有关CSS的overflow和border-radius的那些事,你的圆角被覆盖了吗?
  18. 【原创】大叔经验分享(48)oozie中通过shell执行impala
  19. C#基础知识之面向对象以及面向对象的三大特性
  20. UnzipUtil

热门文章

  1. https://en.wikipedia.org/wiki/Green_threads
  2. VUE知识点小记
  3. Android向系统日历添加日程提醒事件
  4. ES6深入浅出-2 新版函数:箭头函数 2 视频-2.视频 箭头函数杂谈
  5. 本地git仓库推送到服务器自建的git仓库实现目录文件同步教程
  6. 123457123456#0#-----com.threeapp.renZheDadishu02-----忍者版打地鼠
  7. PAT 甲级 1036 Boys vs Girls (25 分)(简单题)
  8. 它在 ServiceHost 指令中提供为 Service 特性值,或在配置元素 system.serviceModel/serviceHostingEnvironment/serviceActivations 中提供
  9. 【Leetcode_easy】686. Repeated String Match
  10. IDA7.2破解版本