1224:最大子矩阵

时间限制: 1000 ms         内存限制: 65536 KB
提交数: 5292     通过数: 3128

【题目描述】

已知矩阵的大小定义为矩阵中所有元素的和。给定一个矩阵,你的任务是找到最大的非空(大小至少是1×1)子矩阵。

【输入】

输入是一个N×N的矩阵。输入的第一行给出N(0

【输出】

输出最大子矩阵的大小。

【输入样例】

40 -2 -7  09  2 -6  2
-4  1 -4  1
-1  8  0 -2

【输出样例】

15

【分析】

这道题的解法有前缀法和动态规划法,贪心算法解法暂时还没有想到,下面来讲解一下前缀法。

前缀和是一个数组的某项下标之前(包括此项元素)的所有数组元素的和。设a为原数组,b为前缀和数组。

一维数组前缀和定义为:,二维数组前缀和定义为:,以样例为例,原矩阵a为:

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

则,前缀和矩阵b为:

0 -2 -9 -9
9 9 -4 -2
5 6 -11 -8
4 13 -4 -3

递推公式为:b[x][y]=b[x-1][y]+b[x][y-1]-b[x-1][y-1]+a[i][j]。这个递推公式也不难理解,就是容斥原理。比如,上面b数组的第4行第2列数据13,套用上述公式,其值就是:13 = 6 + 4 - 5 + 8。

回到本题,假设求下列原矩阵红框部分子矩阵的和,肉眼可见,下图子矩阵和 = -7。

用前缀和矩阵求解方式为:-11 - (-9)- 5 + (-4) = -7。

这里给出O(n^4)的代码,O(n^3)的解法参见后续的1282题目。

四重循环,设子矩阵左上角坐标为(k,l),右下角(i,j)。则分别枚举 i,j,k,l 即可,枚举范围 i∈[1,n],j∈[1,n],k∈[1,i ],l∈[1,j ]。

【参考代码】

#include <stdio.h>
#define N 110
int a[N][N];
int sums[N][N];
int main()
{int i,j,k,l,n,t,max;scanf("%d",&n);for(i=1;i<=n;i++)      //前缀和 {for(j=1;j<=n;j++){scanf("%d",&a[i][j]);sums[i][j]=sums[i-1][j]+sums[i][j-1]-sums[i-1][j-1]+a[i][j];}}max=sums[1][1];for(i=1;i<=n;i++){for(j=1;j<=n;j++){for(k=1;k<=i;k++)       //枚举每个子矩阵,左上角(k,1),右下角(i,j),子矩阵和 {for(l=1;l<=j;l++){t=sums[i][j]-sums[i][l-1]-sums[k-1][j]+sums[k-1][l-1];if(t>max)max=t;}}}}printf("%d\n",max);return 0;
}

http://ybt.ssoier.cn:8088/problem_show.php?pid=1224

信息学奥赛一本通(1224:最大子矩阵)相关推荐

  1. 信息学奥赛一本通(基础算法与数据结构-题解汇总目录)

    信息学奥赛一本通(C++版)在线评测系统 基础(二)基础算法   更新中...... 第一章高精度计算 1307[例1.3]高精度乘法 1308[例1.5]高精除 1309[例1.6]回文数(Noip ...

  2. 信息学奥赛一本通(C++版) 第二部分 基础算法 第九章 动态规划

    总目录详见:https://blog.csdn.net/mrcrack/article/details/86501716 信息学奥赛一本通(C++版) 第二部分 基础算法 第九章 动态规划 第一节 动 ...

  3. 信息学奥赛一本通 (C++)上机练习

    信息学奥赛一本通(C++)上机练习 此书为娃儿的第一本刷题书.娃儿现在四年级 ,希望他能坚持下来.特开贴加油 luogu: disangan223 第一部分 C++语言 第一章 C++语言入门 T10 ...

  4. 信息学奥赛一本通_长乐一中老师演绎“奥赛传奇”

    董永建(右一)在课堂上. 台海网5月14日讯 据福州晚报报道,长乐一中有一位"传奇"老师--15年来,他辅导的学生在全国高中生信息学奥赛中获金牌3人次.银牌3人次.铜牌5人次:在全 ...

  5. 信息学奥赛一本通 提高篇 第5章 矩阵乘法

    例1 矩阵AXB 信息学奥赛一本通(C++版)在线评测系统 [矩阵乘法]矩阵A×B_Uletay-CSDN博客 矩阵乘法--矩阵A×B_vina的博客-CSDN博客 一本通1641[例 1]矩阵 A× ...

  6. 《信息学奥赛一本通提高篇》第6章 组合数学

    例1 计算系数(NOIP2011提高) 信息学奥赛一本通(C++版)在线评测系统 NOIP2011计算系数_nanhan27的博客-CSDN博客 「NOIP2011」 计算系数 - 组合数_TbYan ...

  7. 《信息学奥赛一本通 提高篇》

    提高篇 第一部分 基础算法 第1章 贪心算法 提高篇 第一部分 基础算法 第1章 贪心算法_青少年趣味编程-CSDN博客 提高篇 第一部分 基础算法 第1章 贪心算法 提高篇 第一部分 基础算法 第1 ...

  8. 信息学奥赛一本通 提高篇 第一部分 基础算法 第2章 二分与三分

    信息学奥赛一本通 提高篇 提高版 第一部分 基础算法 第2章 二分与三分 信息学奥赛一本通 提高篇 提高版 第一部分 基础算法 第2章 二分与三分_mrcrack的博客-CSDN博客_信息学奥赛一本通 ...

  9. 信息学奥赛一本通 提高篇 第六部分 数学基础 相关的真题

    第1章   快速幂 1875:[13NOIP提高组]转圈游戏 信息学奥赛一本通(C++版)在线评测系统 第2 章  素数 第 3 章  约数 第 4 章  同余问题 第 5 章  矩阵乘法 第 6 章 ...

  10. 信息学奥赛一本通 1080:余数相同问题 2022.1.29 AC

    http://ybt.ssoier.cn:8088/show_source.php?runid=14630195 /* 信息学奥赛一本通 1080:余数相同问题 2022.1.29 AC http:/ ...

最新文章

  1. DELL 向左走 向右走?(二)
  2. 尊重个体多样性,科学人文终统一
  3. Response_案例1_路径_绝对路径
  4. SAP Spartacus B2B Popover Directive 和 Popover Component 的生命周期管理
  5. 06Prism WPF 入门实战 - Log控件库
  6. 信息学奥赛一本通 1128:图像模糊处理 | OpenJudge NOI 1.8 13:图像模糊处理
  7. 放下十样东西,你会更优秀!
  8. 项目任务管理工具Project Office for mac
  9. java如何抽离_「小程序JAVA实战」 小程序抽离公用方法进行模块化(12)
  10. Java编写简易的代码生成器
  11. 计算机主板光驱插口,如何查看笔记本光驱位和主板的SATA接口版本
  12. linux获取电信超级密码吗,最新中国电信光猫超级密码获取方法
  13. 用matlab机器人工具箱对SCARA机器人建模
  14. 信息系统项目管理十大管理过程整理
  15. java进程线程_Java进程线程笔记
  16. 小伙伴们,线程生命周期、线程池生命周期别再傻傻分不清楚了!!!
  17. 使用docker成功安装paddlespeech进行语音识别
  18. matlab与vs混合编程,matlab与vs混合编程/matlab移植
  19. epub解压的多个html制作单个html
  20. Cocos之 从C++过渡到Lua

热门文章

  1. CentOS 5 上安装git
  2. 这10个功能模块,手把手教你从零设计电商系统
  3. 美观大气!一款基于 Spring Boot 开发 OA 开源产品
  4. 这才是JAVA中打印日志的正确姿势
  5. 3小时解决头疼的年终报表!
  6. 数据结构基础(5) --归并排序
  7. 数据仓库之电商数仓-- 4、可视化报表Superset
  8. RedAlert简介
  9. Redis集群明细文档(转)
  10. mysql集群之keepalived简单搭建