您的位置:首页 > 其它

UVA 10755 Garbage Heap(最大子长方体 可拓展更高维)

2016-10-02 11:04 381 查看
//
//  main.cpp
//  Richard
//
//  Created by 邵金杰 on 16/10/2.
//  Mail:1016427040@qq.com or jasonshaosjj@gmail.com
//  Copyright © 2016年 邵金杰. All rights reserved.
//

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define rep(i,s,e) for(int i=(s);i<=(e);i++)
const int maxn=30;
const long long inf=(1LL<<60);
long long s[maxn][maxn][maxn];
void expand(int i,int &b0,int &b1,int &b2)
{
b0=i&1;i>>=1;
b1=i&1;i>>=1;
b2=i&1;
}
int sign(int b0,int b1,int b2)
{
return (b0+b1+b2)%2==1?1:-1;
}
long long sum(int x1,int x2,int y1,int y2,int z1,int z2)
{
long long sx=0;
int dx=x2-x1+1,dy=y2-y1+1,dz=z2-z1+1;
rep(i,0,7)
{
int b0,b1,b2;
expand(i,b0,b1,b2);
sx-=s[x2-dx*b0][y2-dy*b1][z2-dz*b2]*sign(b0,b1,b2);
}
return sx;
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int a,b,c,b0,b1,b2;
scanf("%d%d%d",&a,&b,&c);
rep(i,1,a) rep(j,1,b) rep(k,1,c) scanf("%lld",&s[i][j][k]);
rep(i,1,a) rep(j,1,b) rep(k,1,c) rep(h,1,7)
{
expand(h,b0,b1,b2);
s[i][j][k]+=s[i-b0][j-b1][k-b2]*sign(b0,b1,b2);
}
long long ans=-inf;
rep(x1,1,a) rep(x2,x1,a) rep(y1,1,b) rep(y2,y1,b)
{
long long M=0;
rep(z,1,c)
{
long long t=sum(x1,x2,y1,y2,1,z);
ans=max(ans,t-M);
M=min(M,t);
}
}
printf("%lld\n",ans);
if(t) printf("\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: