动态规划2

xiaoxiao2021-02-28  99

描述 已知矩阵的大小定义为矩阵中所有元素的和。给定一个矩阵,你的任务是找到最大的非空(大小至少是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个整数……)给出矩阵中的N 2个整数,整数之间由空白字符分隔(空格或者空行)。已知矩阵中整数的范围都在[-127, 127]。 输出 输出最大子矩阵的大小。 样例输入 4 0 -2 -7 0 9 2 -6 2 -4 1 -4 1 -1 8 0 -2 样例输出

15

#include <iostream> using namespace std ; int abc ( int a [], int n ) { int i ,b ,c ; c = 0 ; b = 0 ; for (i = 0 ;i <n ;i ++) { if (c > 0 ) c =c +a [i ]; else c =a [i ]; if (b <c ) b =c ; } return b ; } int main () { int a ,i ,j ,c [ 103 ],k ,d ,e , b [ 103 ][ 103 ]; cin >>a ; for (i = 0 ;i <a ;i ++) for (j = 0 ;j <a ;j ++) cin >>b [i ][j ]; e = 0 ; for (i = 0 ;i <a ;i ++) { for (j = 0 ;j <a ;j ++) c [j ]= 0 ; for (j =i ;j <a ;j ++) { for (k = 0 ;k <a ;k ++) c [k ]=c [k ]+b [j ][k ]; d = abc (c ,a ); if (e <d ) e =d ; } } cout <<e <<endl ; return 0 ; }
转载请注明原文地址: https://www.6miu.com/read-70193.html

最新回复(0)