using
System;
class
GFG{
static
int
maxSum(
int
[]arr,
int
i,
int
n,
int
prev,
bool
is_selected,
int
[,]dp)
{
if
(i == n)
{
return
0;
}
int
cur = Math.Abs(arr[i]) % 2;
if
(dp[i, prev] != -1)
{
return
dp[i, prev];
}
if
(i == n - 1 && is_selected ==
false
)
return
dp[i, prev] = arr[i];
if
(cur != prev)
{
dp[i, prev] = arr[i] + maxSum(arr, i + 1, n,
cur,
true
, dp);
}
dp[i, prev] = Math.Max(dp[i, prev], maxSum(
arr, i + 1, n, prev, is_selected, dp));
return
dp[i, prev];
}
static
void
maxSumUtil(
int
[]arr,
int
n)
{
int
[,]dp =
new
int
[100, 3];
for
(
int
i = 0; i < 100; ++i)
{
for
(
int
j = 0; j < 3; ++j)
{
dp[i, j] = -1;
}
}
Console.Write(maxSum(arr, 0, n, 2,
false
, dp));
}
public
static
void
Main(String []args)
{
int
[]arr = { 1, 2, 6, 8, -5, 10 };
int
N = arr.Length;
maxSumUtil(arr, N);
}
}