信息学奥赛一本通(1224:最大子矩阵)
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:最大子矩阵)相关推荐
- 信息学奥赛一本通(基础算法与数据结构-题解汇总目录)
信息学奥赛一本通(C++版)在线评测系统 基础(二)基础算法 更新中...... 第一章高精度计算 1307[例1.3]高精度乘法 1308[例1.5]高精除 1309[例1.6]回文数(Noip ...
- 信息学奥赛一本通(C++版) 第二部分 基础算法 第九章 动态规划
总目录详见:https://blog.csdn.net/mrcrack/article/details/86501716 信息学奥赛一本通(C++版) 第二部分 基础算法 第九章 动态规划 第一节 动 ...
- 信息学奥赛一本通 (C++)上机练习
信息学奥赛一本通(C++)上机练习 此书为娃儿的第一本刷题书.娃儿现在四年级 ,希望他能坚持下来.特开贴加油 luogu: disangan223 第一部分 C++语言 第一章 C++语言入门 T10 ...
- 信息学奥赛一本通_长乐一中老师演绎“奥赛传奇”
董永建(右一)在课堂上. 台海网5月14日讯 据福州晚报报道,长乐一中有一位"传奇"老师--15年来,他辅导的学生在全国高中生信息学奥赛中获金牌3人次.银牌3人次.铜牌5人次:在全 ...
- 信息学奥赛一本通 提高篇 第5章 矩阵乘法
例1 矩阵AXB 信息学奥赛一本通(C++版)在线评测系统 [矩阵乘法]矩阵A×B_Uletay-CSDN博客 矩阵乘法--矩阵A×B_vina的博客-CSDN博客 一本通1641[例 1]矩阵 A× ...
- 《信息学奥赛一本通提高篇》第6章 组合数学
例1 计算系数(NOIP2011提高) 信息学奥赛一本通(C++版)在线评测系统 NOIP2011计算系数_nanhan27的博客-CSDN博客 「NOIP2011」 计算系数 - 组合数_TbYan ...
- 《信息学奥赛一本通 提高篇》
提高篇 第一部分 基础算法 第1章 贪心算法 提高篇 第一部分 基础算法 第1章 贪心算法_青少年趣味编程-CSDN博客 提高篇 第一部分 基础算法 第1章 贪心算法 提高篇 第一部分 基础算法 第1 ...
- 信息学奥赛一本通 提高篇 第一部分 基础算法 第2章 二分与三分
信息学奥赛一本通 提高篇 提高版 第一部分 基础算法 第2章 二分与三分 信息学奥赛一本通 提高篇 提高版 第一部分 基础算法 第2章 二分与三分_mrcrack的博客-CSDN博客_信息学奥赛一本通 ...
- 信息学奥赛一本通 提高篇 第六部分 数学基础 相关的真题
第1章 快速幂 1875:[13NOIP提高组]转圈游戏 信息学奥赛一本通(C++版)在线评测系统 第2 章 素数 第 3 章 约数 第 4 章 同余问题 第 5 章 矩阵乘法 第 6 章 ...
- 信息学奥赛一本通 1080:余数相同问题 2022.1.29 AC
http://ybt.ssoier.cn:8088/show_source.php?runid=14630195 /* 信息学奥赛一本通 1080:余数相同问题 2022.1.29 AC http:/ ...
最新文章
- DELL 向左走 向右走?(二)
- 尊重个体多样性,科学人文终统一
- Response_案例1_路径_绝对路径
- SAP Spartacus B2B Popover Directive 和 Popover Component 的生命周期管理
- 06Prism WPF 入门实战 - Log控件库
- 信息学奥赛一本通 1128:图像模糊处理 | OpenJudge NOI 1.8 13:图像模糊处理
- 放下十样东西,你会更优秀!
- 项目任务管理工具Project Office for mac
- java如何抽离_「小程序JAVA实战」 小程序抽离公用方法进行模块化(12)
- Java编写简易的代码生成器
- 计算机主板光驱插口,如何查看笔记本光驱位和主板的SATA接口版本
- linux获取电信超级密码吗,最新中国电信光猫超级密码获取方法
- 用matlab机器人工具箱对SCARA机器人建模
- 信息系统项目管理十大管理过程整理
- java进程线程_Java进程线程笔记
- 小伙伴们,线程生命周期、线程池生命周期别再傻傻分不清楚了!!!
- 使用docker成功安装paddlespeech进行语音识别
- matlab与vs混合编程,matlab与vs混合编程/matlab移植
- epub解压的多个html制作单个html
- Cocos之 从C++过渡到Lua