using
System;
using
System.Collections.Generic;
class
GFG {
static
int
recursiveChoosing(
int
[] arr,
int
start,
int
M,
Dictionary<Tuple<
int
,
int
>,
int
> dp)
{
Tuple<
int
,
int
> key =
new
Tuple<
int
,
int
>(start, M);
if
(start >= arr.Length)
{
return
0;
}
if
(arr.Length - start <= 2 * M)
{
int
Sum = 0;
for
(
int
i = start; i < arr.Length; i++)
{
Sum = Sum + arr[i];
}
return
Sum;
}
int
sum = 0;
for
(
int
i = start; i < arr.Length; i++)
{
sum = sum + arr[i];
}
int
total = sum;
if
(dp.ContainsKey(key))
{
return
dp[key];
}
int
psa = 0;
for
(
int
x = 1; x < 2 * M + 1; x++)
{
int
psb = recursiveChoosing(arr, start + x, Math.Max(x, M), dp);
psa = Math.Max(psa, total - psb);
}
dp[key] = psa;
return
dp[key];
}
static
void
Main()
{
int
[] arr = {2, 7, 9, 4, 4};
int
N = arr.Length;
Dictionary<Tuple<
int
,
int
>,
int
> dp =
new
Dictionary<Tuple<
int
,
int
>,
int
>();
Console.Write(recursiveChoosing(arr, 0, 1, dp));
}
}