UVA - 10755 Garbage Heap(最大子矩阵)
2014-11-11 16:12
253 查看
#include <cstdio> #include <cstring> #include <iostream> #include <vector> #include <algorithm> #include <cctype> #include <set> using namespace std; #define rep(i,b,c) for(int (i)=(b); (i)<=(c) ; (++i) ) const int maxn = 22; long long maze[maxn][maxn][maxn],mat[maxn][maxn],A,B,C,Help[maxn]; int main() { memset(maze,0,sizeof(maze)); memset(mat,0,sizeof(mat)); int T; scanf("%d",&T); while(T--){ scanf("%lld %lld %lld",&A,&B,&C); for(int i=1;i<=A;i++){ for(int j=1;j<=B;j++) for(int k=1;k<=C;k++) { scanf("%lld",&maze[i][j][k]); maze[i][j][k]+=maze[i-1][j][k]; } } long long res; bool flag=false; rep(f1,1,A) rep(f2,f1,A){ rep(i,1,B) rep(j,1,C){ mat[i][j] = maze[f2][i][j] - maze[f1-1][i][j]; } rep(i,1,B) rep(j,1,C){ mat[i][j] += mat[i-1][j]; } rep(s1,1,B) rep(s2,s1,B){ long long M = 0; Help[0] =0 ; for(int i=1;i<=C;i++){ Help[i] = mat[s2][i]-mat[s1-1][i]+Help[i-1]; if(!flag) {flag=true; res = Help[i] - M;} else res = max(res,Help[i]-M); M = min(M,Help[i]); } } } printf("%lld\n",res); if(T) printf("\n"); } return 0; }
相关文章推荐
- HDU1231最大连续子序列&Uva108Maximum Sum最大子矩阵(尺取法)
- UVa 10755 - Garbage Heap 三维最大子矩阵问题转化为1维..
- Uva 10755 Garbage Heap(三维最大子矩阵)
- uvalive 最大子矩阵
- 【降维解法:最大字段和->最大子矩阵和->最终版最大子长方体和】【UVA10755】Garbage Heap
- UVA 11297 Census(2D线段树解决子矩阵的最大最小)
- 【降维解法:最大字段和->最大子矩阵和->最终版最大子长方体和】【UVA10755】Garbage Heap
- uva 10755 - Garbage Heap(三维最大子矩阵)
- UVA - 10827 Maximum sum on a torus 求循环矩阵的最大子矩阵
- uva 1330 City Game (最大子矩阵)
- UVa 10827 Maximum sum on a torus (贪心&矩阵环中的最大子矩阵和)
- UVA - 10827 Maximum sum on a torus(dp最大子矩阵和)
- UVA 10827 Maximum sum on a torus(环面上的最大子矩阵和)
- UVa 10074 Take the Land (转化思想&最大子矩阵和)
- UVa 108 Maximum Sum (贪心&最大子矩阵和)
- uva10827 循环矩阵的最大子矩阵
- UVA 1330 City Game(最大子矩阵)
- UVA 108 Maximum Sum (最大子矩阵和) POJ 1050
- uva 10827 - Maximum sum on a torus(最大子矩阵升级版)
- UVA - 108 Maximum Sum(最大子矩阵和)