题目1139:最大子矩阵
2014-04-08 17:07
246 查看
题目描述:
已知矩阵的大小定义为矩阵中所有元素的和。给定一个矩阵,你的任务是找到最大的非空(大小至少是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]。
输出:
测试数据可能有多组,对于每组测试数据,输出最大子矩阵的大小。
样例输入:
样例输出:
15
已知矩阵的大小定义为矩阵中所有元素的和。给定一个矩阵,你的任务是找到最大的非空(大小至少是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]。
输出:
测试数据可能有多组,对于每组测试数据,输出最大子矩阵的大小。
样例输入:
4 0 -2 -7 0 9 2 -6 2 -4 1 -4 1 -1 8 0 -2
样例输出:
15
代码:
#include<stdio.h> #include<stdlib.h> #define Max 110 //得到序列中连续子序列的最大和 int getMax(int b[],int n) { int ans = b[0]; int max = ans; for (int i=1; i<n; i++) { (b[i] + ans > b[i])? ans += b[i] : ans = b[i];//判断ans大于0还是小于0 if (max < ans) { max = ans; } } return max; } int main() { int n; int a[Max][Max]; while(scanf("%d",&n) != EOF) { int max = -200,tmp; for(int i = 0; i < n;i++) for(int j = 0;j < n; j++) scanf("%d",&a[i][j]); for(int i = 0 ; i < n ; i++) { int sum[Max] = {0}; for(int j = i ;j < n;j++) { int k; for(k = 0; k < n; k++) { sum[k] += a[j][k];//一维数组保存的是从第i到第j行的和,动态更新 } tmp = getMax(sum,k); if(tmp > max) max = tmp; } } printf("%d\n",max); } }
相关文章推荐
- 题目1139:最大子矩阵
- 动态规划_题目1139:最大子矩阵
- 九度题目1139:最大子矩阵
- 九度OJ 题目1139:最大子矩阵
- 题目1139:最大子矩阵
- [Jobdu] 题目1139:最大子矩阵
- 九度OJ; 题目1139:最大子矩阵
- OJ_1139 最大子矩阵
- 题目:返回一个二维循环数组中最大子矩阵的和
- 九度OJ 1139 最大子矩阵
- HDOJ 题目1559 最大子矩阵(dp)
- 竞赛题目讲解-【Greater New York 2001】最大子矩阵
- 校招季——编程题目(15、16) 约瑟夫问题 最大子矩阵和
- 九度OJ 1139:最大子矩阵 (矩阵运算、缓存)
- 九度OJ 1139:最大子矩阵 (矩阵运算、缓存)
- 最大子矩阵和【dp】
- [SCOI2005][BZOJ1084] 最大子矩阵
- hdu-1081 To The Max (最大子矩阵和)
- Python笔试题目:求最大的K个数子,解法二,适合小型数据集的情况
- D - 最大子矩阵和 51Nod - 1051