题目1139:最大子矩阵
来源:互联网 发布:现在淘宝开店步骤 编辑:程序博客网 时间:2024/06/07 05:47
- 题目描述:
已知矩阵的大小定义为矩阵中所有元素的和。给定一个矩阵,你的任务是找到最大的非空(大小至少是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
代码:
#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);}}
0 0
- 题目1139:最大子矩阵
- 题目1139:最大子矩阵
- 题目1139:最大子矩阵
- 题目1139:最大子矩阵
- 最大子矩阵题目
- 九度题目1139:最大子矩阵
- 动态规划_题目1139:最大子矩阵
- 九度OJ; 题目1139:最大子矩阵
- 九度OJ 题目1139:最大子矩阵
- 题目1497:面积最大的全1子矩阵
- 题目1497:面积最大的全1子矩阵
- HDOJ 题目1559 最大子矩阵(dp)
- 题目1497:面积最大的全1子矩阵
- 竞赛题目讲解-【Greater New York 2001】最大子矩阵
- 九度OJ 1139 最大子矩阵
- 九度OJ 1139 最大子矩阵
- 九度1139 最大子矩阵 DP
- 题目:最大子数组
- 2014.4.8 今天主要是聊天室
- java.lang.IllegalStateException: LifecycleProcessor not initialized - call 'refresh' before invoking
- 常用背包小结
- org.hibernate.annotations.Entity和javax.persistence.Entity 区别
- 动态规划练习题
- 题目1139:最大子矩阵
- linux多线程 pthread_cond_wait() 函数
- 丁俊晖夺冠身价猛增 单赛季5冠“台球皇帝”亨德利
- fork与行缓冲
- Service Unavailable 错误应用程序名称: w3wp.exe 错误模块名称: KERNELBASE.dll
- Matlab 点滴
- 软件界面设计
- linux:输入/输出、重定向、管道
- EnumMap的相关运用