using
System;
class
GFG{
static
int
MAX = 100;
static
int
[, ,]dp =
new
int
[1000, MAX, MAX];
static
int
productDigitSum(
int
x,
int
y)
{
int
sumx = 0;
while
(x > 0)
{
sumx += (x % 10);
x /= 10;
}
int
sumy = 0;
while
(y > 0)
{
sumy += (y % 10);
y /= 10;
}
return
(sumx * sumy);
}
static
int
solve(
int
[]arr,
int
i,
int
len,
int
prev,
int
n,
int
k)
{
if
(len == k)
return
0;
if
(i == n)
return
Int32.MinValue;
if
(dp[i, len, prev] != 0)
return
dp[i, len, prev];
int
inc = 0, exc = 0;
if
((len & 1) != 0)
{
inc = (productDigitSum(arr[prev], arr[i]) +
solve(arr, i + 1, len + 1, 0, n, k));
}
else
{
inc = solve(arr, i + 1, len + 1, i, n, k);
}
exc = solve(arr, i + 1, len, prev, n, k);
return
dp[i, len, prev] = Math.Max(inc, exc);
}
public
static
void
Main()
{
int
[]arr = { 10, 5, 9, 101, 24, 2, 20, 14 };
int
n = arr.Length;
int
k = 6;
Console.Write(solve(arr, 0, 0, 0, n, k));
}
}