using
System;
using
System.Linq;
public
class
GFG{
static
int
[,] dp =
new
int
[1001, 5];
static
int
Recur(
int
i,
int
j,
int
[,] hashMap)
{
if
(i == 1001)
{
return
0;
}
if
(dp[i, j] != -1)
{
return
dp[i, j];
}
int
ans = 0;
if
(j != 4)
{
ans = Math.Max(ans,
Recur(i + 1, j + 1, hashMap)
+ hashMap[i + 1, j + 1]);
}
ans = Math.Max(ans, Recur(i + 1, j, hashMap)
+ hashMap[i + 1, j]);
if
(j != 0)
{
ans = Math.Max(ans,
Recur(i + 1, j - 1, hashMap)
+ hashMap[i + 1, j - 1]);
}
return
dp[i, j] = ans;
}
static
int
FindMaximumScore(
int
[,] arr,
int
N)
{
for
(
int
i = 0; i < dp.GetLength(0); i++)
{
for
(
int
j = 0; j < dp.GetLength(1); j++)
{
dp[i, j] = -1;
}
}
int
[,] hashMap =
new
int
[100010, 6];
for
(
int
i = 0; i < N; i++)
{
hashMap[arr[i, 0], arr[i, 1]] = arr[i, 2];
}
return
Recur(0, 0, hashMap);
}
static
public
void
Main (){
int
[, ] arr
= { { 1, 0, 100 }, { 3, 3, 10 }, { 5, 4, 1 } };
int
N = arr.GetLength(0);
Console.WriteLine(FindMaximumScore(arr, N));
int
[, ] arr1
= { { 1, 4, 1 }, { 2, 4, 1 }, { 3, 4, 1 } };
int
N1 = arr1.GetLength(0);
Console.WriteLine(FindMaximumScore(arr1, N1));
}
}