给出一个三维的矩阵,它的子矩阵的值定义为子矩阵中所有值之和,求它的最大子矩阵和。
先输入一个正整数T,表示有T种情况。每种情况的第一行输入三个正整数t、n、m,表示方体的高、长、宽,然后有t个n*m的数,以矩阵的阵列方式输入。
思路:先把三维压成二维,元素为三维子块的和。 然后把二维压缩成一维。一维的最大序列和算法都懂的。这里吧三维转二维的代码贴出来。
int submax3d() { int a[M][M]; int i,j,k,w; int max = 0; for(int i = 0; i<= t; i++) { memset(a,0,sizeof(a)); for(int j = i; j<=t; j++) { for(k = 1; k<=n ;k++) for(w = 1;w<=m ;w++) a[k][w] = num[j][k][w]; int tt = submax2d(a); if(tt>max) max = tt; } } return max; }