using
System;
class
GFG
{
static
int
max_size= 20;
static
int
max_k =20;
static
int
[,]dp =
new
int
[max_size, max_k];
static
Boolean [,]v =
new
Boolean[max_size, max_k];
static
int
sum = 0;
static
void
findSum(
int
[]arr,
int
n)
{
for
(
int
i = 0; i < n; i++)
sum += arr[i];
}
static
int
cntWays(
int
[]arr,
int
i,
int
ck,
int
k,
int
n,
int
curr_sum)
{
if
(sum % k != 0)
return
0;
if
(i != n && ck == k + 1)
return
0;
if
(i == n)
{
if
(ck == k + 1)
return
1;
else
return
0;
}
if
(v[i, ck])
return
dp[i, ck];
curr_sum += arr[i];
v[i, ck] =
true
;
dp[i,ck] = cntWays(arr, i + 1, ck, k, n, curr_sum);
if
(curr_sum == (sum / k) * ck)
dp[i, ck] += cntWays(arr, i + 1, ck + 1, k, n, curr_sum);
return
dp[i, ck];
}
public
static
void
Main(String[] args)
{
int
[]arr = { 1, -1, 1, -1, 1, -1 };
int
n = arr.Length;
int
k = 2;
findSum(arr, n);
Console.WriteLine(cntWays(arr, 0, 1, k, n, 0));
}
}