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

UVA – 10755 Garbage Heap(最大子矩阵)

2019年04月04日 ⁄ 综合 ⁄ 共 910字 ⁄ 字号 评论关闭
#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;
}


抱歉!评论已关闭.