using
System;
class
GFG
{
public
static
int
MaximumPoints(
int
[,] points,
int
N)
{
int
[,] dp =
new
int
[N + 1, 4];
for
(
int
i = 0; i <= N; i++)
{
for
(
int
j = 0; j < 4; j++)
{
dp[i, j] = -1;
}
}
return
Helper(points, N - 1, 3, dp);
}
static
int
Helper(
int
[,] points,
int
n,
int
prev,
int
[,] dp)
{
if
(n == 0)
{
int
maximum = 0;
for
(
int
i = 0; i <= 2; i++)
{
if
(i != prev)
{
maximum = Math.Max(maximum, points[0, i]);
}
}
return
maximum;
}
if
(dp[n, prev] != -1)
{
return
dp[n, prev];
}
int
maxPoints = 0;
for
(
int
i = 0; i <= 2; i++)
{
if
(i != prev)
{
int
point = points[n, i] + Helper(points, n - 1, i, dp);
maxPoints = Math.Max(maxPoints, point);
}
}
return
dp[n, prev] = maxPoints;
}
public
static
void
Main(
string
[] args)
{
int
N = 3;
int
[,] points = { { 1, 2, 5 }, { 3, 1, 1 }, { 3, 3, 3 } };
int
maxPoints = MaximumPoints(points, N);
Console.WriteLine(maxPoints);
}
}