废料堆可以为空(即负数时应输出0),同时格式应该是:
ans
\n
ans
\n
……
ans
\n
(最后一组只用输出一个回车)
by CreeperK @ 2018-04-10 13:12:47
我搞错了,应该是废料堆不为空,即对于下面这组数据:
1 1 1
-5
应输出-5而不是0.
by CreeperK @ 2018-04-10 13:16:47
改了还是没过
```cpp
#define maxn 20+5
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
long long map[maxn][maxn][maxn],sum[maxn][maxn][maxn];
int main()
{
int t;
cin >> t;
for (int kase=0;kase<t;++kase)
{
int a,b,c;
memset(sum,0,sizeof(sum));
cin >> a >> b >> c;
for (int i=1;i<=a;++i)
for (int j=1;j<=b;++j)
for (int k=1;k<=c;++k)
cin >> map[i][j][k];
for (int i=1;i<=a;++i)
for (int j=1;j<=b;++j)
for (int k=1;k<=c;++k)
sum[i][j][k]=sum[i][j][k-1]+sum[i][j-1][k]-sum[i][j-1][k-1]+map[i][j][k];
long long ans=-2333333333;
for (int x1=1;x1<=b;++x1)
for (int y1=1;y1<=c;++y1)
for (int x2=x1;x2<=b;++x2)
for (int y2=y1;y2<=c;++y2)
{
long long tmp=-2333333333,s=0;
for (int i=1;i<=a;++i)
{
long long num=sum[i][x2][y2]-sum[i][x2][y1-1]-sum[i][x1-1][y2]+sum[i][x1-1][y1-1];
s+=num;
if (s<0) s=0;
tmp=max(s,tmp);
}
ans=max(ans,tmp);
}
if (kase) cout << endl;
cout << ans << endl;
}
return 0;
}
```
by 曦行夜落 @ 2018-04-10 17:28:17