博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[Jobdu] 题目1139:最大子矩阵
阅读量:5859 次
发布时间:2019-06-19

本文共 1918 字,大约阅读时间需要 6 分钟。

题目描述:

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

比如,如下4 * 4的矩阵
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 (0 < N <= 100)。

再后面的若干行中,依次(首先从左到右给出第一行的N个整数,再从左到右给出第二行的N个整数……)给出矩阵中的N2个整数,整数之间由空白字符分隔(空格或者空行)。
已知矩阵中整数的范围都在[-127, 127]。

输出:

测试数据可能有多组,对于每组测试数据,输出最大子矩阵的大小。

样例输入:
40 -2 -7 09 2 -6 2-4 1 -4  1-1 8  0 -2
样例输出:
15

第一映像是暴力枚举,不过显然会超时,然后就想到了DP。其实因为矩阵肯定是对齐的,所以如我们将两行加起来求最大子数组就可以得到一个行数为2的子矩阵。所以问题就转化成了求一个数组的最大子数组和。然后就是枚举第i行到第j行相加得到的数组了。注意res的值不能设为0,因为可能最后的结果是负数。

1 #include 
2 #include
3 #include
4 using namespace std; 5 6 int N; 7 int a[101][101]; 8 int dp[101]; 9 10 int getMaxArray(int a[], int N) {11 int max = a[0], tmp = 0;12 for (int i = 0; i < N; ++i) {13 if (tmp > 0) {14 tmp += a[i];15 } else {16 tmp = a[i];17 }18 max = max > tmp ? max : tmp;19 }20 return max;21 }22 23 int main() {24 //freopen("input.txt", "r", stdin);25 while (scanf("%d", &N) != EOF) {26 for (int i = 0; i < N; ++i) {27 for (int j = 0; j < N; ++j) {28 scanf("%d", &a[i][j]);29 }30 }31 int res = a[0][0], tmp;32 for (int i = 0; i < N; ++i) {33 memset(dp, 0, sizeof(dp));34 for (int j = i; j < N; ++j) {35 for (int k = 0; k < N; ++k) {36 dp[k] += a[j][k];37 }38 tmp = getMaxArray(dp, N);39 res = res > tmp ? res : tmp;40 }41 }42 printf("%d\n", res);43 }44 return 0;45 }46 47 /**************************************************************48 Problem: 113949 User: hupo25050 Language: C++51 Result: Accepted52 Time:60 ms53 Memory:1560 kb54 ****************************************************************/

 

转载地址:http://kirjx.baihongyu.com/

你可能感兴趣的文章
【JAVA学习笔记】学习J2EE值得研究的开源项目(转)
查看>>
Struts中文乱码问题
查看>>
Linux与Linux、window之间的文件共享
查看>>
Spring源码-AOP(二)-AOP概念
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
polymer的伪元素操作(::语法)
查看>>
在华为设备上实战站点到站点的虚拟私有网络
查看>>
游戏领域之外的发展机会
查看>>
Python中的一些面试题(3)
查看>>
基于路由的×××(转)
查看>>
rebuild index与sort
查看>>
【微软公有云系列】Hyper-v(WinSer 2012 R2)网络虚拟化(五)NVGRE 网关实现××× (Site to Site) 下篇...
查看>>
Docker 镜像小结 - 每天5分钟玩转 Docker 容器技术(21)
查看>>
C语言的指针、数据、结构体关系总结
查看>>
验证控件的使用
查看>>
C#基础知识(六)
查看>>
22个带给你灵感的网页联系表单设计案例
查看>>
Slave_SQL_Running: No mysql同步故障解决
查看>>
eclipse debug
查看>>