using
System;
class
GFG
{
private
static
long
FindMaxSubCubeSum(
int
[,,] matrix,
int
M,
int
N,
int
O)
{
long
maxSum =
long
.MinValue;
for
(
int
i = 0; i < M; ++i)
{
long
[,] temp =
new
long
[N, O];
for
(
int
j = i; j < M; ++j)
{
for
(
int
k = 0; k < N; ++k)
{
for
(
int
l = 0; l < O; ++l)
{
temp[k, l] += matrix[j, k, l];
}
}
for
(
int
k = 0; k < N; ++k)
{
long
[] innerTemp =
new
long
[O];
long
[] kadane2 =
new
long
[O];
for
(
int
l = k; l < N; ++l)
{
for
(
int
m = 0; m < O; ++m)
{
innerTemp[m] += temp[l, m];
}
Array.Copy(innerTemp, kadane2, O);
for
(
int
m = 0; m < O; ++m)
{
if
(m > 0)
kadane2[m] += kadane2[m - 1];
maxSum = Math.Max(maxSum, kadane2[m]);
if
(kadane2[m] < 0)
kadane2[m] = 0;
}
}
}
}
}
return
maxSum;
}
static
void
Main(
string
[] args)
{
int
M = 3, N = 3, O = 3;
int
[,,] matrix =
new
int
[,,]
{
{ { -1, -2, 3 }, { -4, -5, 6 }, { 7, 8, 9 } },
{ { -9, -8, 7 }, { -6, -5, 4 }, { 3, 2, 1 } },
{ { -1, -3, 5 }, { -7, -9, 2 }, { 4, 6, 8 } }
};
long
result = FindMaxSubCubeSum(matrix, M, N, O);
Console.WriteLine(
"The maximum sum of a sub-cube in the 3D array is: "
+ result);
}
}