using
System;
class
GFG
{
static
int
maxSum(
int
[] a,
int
n)
{
int
ans = 0;
int
[] arr =
new
int
[n + 1];
for
(
int
i = 1; i <= n; i++)
arr[i] = a[i - 1];
int
[, ] dp =
new
int
[n + 1, 3];
for
(
int
i = 1; i <= n; ++i)
{
dp[i, 0] = Math.Max(arr[i], dp[i - 1, 0] + arr[i]);
dp[i, 1] = Math.Max(0, dp[i - 1, 0]) - arr[i];
if
(i >= 2)
dp[i, 1] = Math.Max(dp[i, 1], dp[i - 1, 1] + arr[i]);
if
(i >= 2)
dp[i, 2] = dp[i - 1, 1] - arr[i];
if
(i >= 3)
dp[i, 2] = Math.Max(dp[i, 2], dp[i - 1, 2] + arr[i]);
ans = Math.Max(ans, dp[i, 0]);
ans = Math.Max(ans, dp[i, 1]);
ans = Math.Max(ans, dp[i, 2]);
}
return
ans;
}
public
static
void
Main ()
{
int
[] arr = { -5, 3, 2, 7, -8, 3, 7, -9, 10, 12, -6 };
int
n = arr.Length;
Console.WriteLine(maxSum(arr, n));
}
}