class
GFG
{
static
int
N =
5
;
static
int
func(
int
idx,
int
cur,
int
a[],
int
dp[][],
int
n,
int
x)
{
if
(idx == n)
{
return
0
;
}
if
(dp[idx][cur] != -
1
)
{
return
dp[idx][cur];
}
int
ans =
0
;
if
(cur ==
0
)
{
ans = Math.max(ans, a[idx] +
func(idx +
1
,
0
, a, dp, n, x));
ans = Math.max(ans, x * a[idx] +
func(idx +
1
,
1
, a, dp, n, x));
}
else
if
(cur ==
1
)
{
ans = Math.max(ans, x * a[idx] +
func(idx +
1
,
1
, a, dp, n, x));
ans = Math.max(ans, a[idx] +
func(idx +
1
,
2
, a, dp, n, x));
}
else
{
ans = Math.max(ans, a[idx] +
func(idx +
1
,
2
, a, dp, n, x));
}
return
dp[idx][cur] = ans;
}
static
int
getMaximumSum(
int
a[],
int
n,
int
x)
{
int
dp[][] =
new
int
[n][
3
];
for
(
int
i =
0
; i < n; i++)
{
for
(
int
j =
0
; j <
3
; j++)
{
dp[i][j] = -
1
;
}
}
int
maxi =
0
;
for
(
int
i =
0
; i < n; i++)
{
maxi = Math.max(maxi, func(i,
0
, a, dp, n, x));
}
return
maxi;
}
public
static
void
main(String[] args)
{
int
a[] = {-
3
,
8
, -
2
,
1
, -
6
};
int
n = a.length;
int
x = -
1
;
System.out.println(getMaximumSum(a, n, x));
}
}