using
System;
class
GFG{
static
int
[,,] dp =
new
int
[100, 100, 100];
static
int
minSumDifference(
int
[] arr,
int
n,
int
k1,
int
k2,
int
sum1,
int
sum2)
{
if
(n < 0)
{
if
(k1 == 0 && k2 == 0)
{
return
Math.Abs(sum1 - sum2);
}
else
{
return
Int32.MaxValue;
}
}
if
(dp[n, sum1, sum2] != -1)
{
return
dp[n, sum1, sum2];
}
int
op1 = Int32.MaxValue;
int
op2 = Int32.MaxValue;
int
op3 = Int32.MaxValue;
if
(k1 > 0)
{
op1 = minSumDifference(arr, n - 1,
k1 - 1, k2,
sum1 + arr[n],
sum2);
}
if
(k2 > 0)
{
op2 = minSumDifference(arr, n - 1,
k1, k2 - 1, sum1,
sum2 + arr[n]);
}
op3 = minSumDifference(arr, n - 1,
k1, k2,
sum1, sum2);
dp[n, sum1, sum2] = Math.Min(op1,
Math.Min(op2, op3));
return
dp[n, sum1, sum2];
}
static
public
void
Main()
{
int
[] arr = { 12, 3, 5, 6, 7, 17 };
int
K = 2;
int
N = arr.Length;
for
(
int
i = 0; i < 100; i++)
{
for
(
int
j = 0; j < 100; j++)
{
for
(
int
k = 0; k < 100; k++)
{
dp[i, j, k] = -1;
}
}
}
Console.WriteLine(minSumDifference(arr, N - 1, K,
K, 0, 0));
}
}