现在的位置: 首页 > 综合 > 正文

[DP]经典例子–最大子块和(3维)

2013年10月12日 ⁄ 综合 ⁄ 共 387字 ⁄ 字号 评论关闭

给出一个三维的矩阵,它的子矩阵的值定义为子矩阵中所有值之和,求它的最大子矩阵和。

先输入一个正整数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;
}

抱歉!评论已关闭.