using
System;
class
Program
{
static
int
MaxGoldCollected(
int
[][] matrix)
{
int
levels = matrix.Length;
int
blocks = matrix[0].Length;
int
[,] board =
new
int
[levels, blocks + 2];
for
(
int
level = 0; level < levels; level++)
{
board[level, 0] = board[level, blocks + 1] = -1;
}
for
(
int
level = 0; level < levels; level++)
{
for
(
int
block = 0; block < blocks; block++)
{
board[level, block + 1] = matrix[level][block];
}
}
for
(
int
level = levels - 2; level >= 0; level--)
{
for
(
int
block = 1; block <= blocks; block++)
{
if
(board[level, block] != -1)
{
if
(board[level + 1, block - 1] != -1 ||
board[level + 1, block] != -1 ||
board[level + 1, block + 1] != -1)
{
board[level, block] += Math.Max(
Math.Max(board[level + 1, block - 1],
board[level + 1, block]),
board[level + 1, block + 1]);
}
}
}
}
int
maxGold = board[0, 1];
for
(
int
block = 2; block <= blocks; block++)
{
if
(board[0, block] > maxGold)
maxGold = board[0, block];
}
if
(maxGold == -1)
maxGold = 0;
return
maxGold;
}
static
void
Main()
{
int
[][] matrix =
new
int
[][]
{
new
int
[] {2, 5, 6},
new
int
[] {-1, 3, 2},
new
int
[] {4, -1, 5}
};
int
result = MaxGoldCollected(matrix);
Console.WriteLine(
"The maximum gold collected is: "
+ result);
}
}