using
System;
class
GFG
{
static
int
MAX = 1000;
static
int
[,]dp =
new
int
[MAX, MAX];
static
int
minSizeRec(
int
[]arr,
int
low,
int
high,
int
k)
{
if
(dp[low, high] != -1)
{
return
dp[low, high];
}
if
((high - low + 1) < 3)
{
return
high - low + 1;
}
int
res = 1 + minSizeRec(arr,
low + 1, high, k);
for
(
int
i = low + 1; i <= high - 1; i++)
{
for
(
int
j = i + 1; j <= high; j++)
{
if
(arr[i] == (arr[low] + k) &&
arr[j] == (arr[low] + 2 * k) &&
minSizeRec(arr, low + 1, i - 1, k) == 0 &&
minSizeRec(arr, i + 1, j - 1, k) == 0)
{
res = Math.Min(res, minSizeRec(arr, j + 1, high, k));
}
}
}
return
(dp[low, high] = res);
}
static
int
minSize(
int
[]arr,
int
n,
int
k)
{
for
(
int
i = 0; i < MAX; i++)
{
for
(
int
j = 0; j < MAX; j++)
{
dp[i, j] = -1;
}
}
return
minSizeRec(arr, 0, n - 1, k);
}
public
static
void
Main(String[] args)
{
int
[]arr = {2, 3, 4, 5, 6, 4};
int
n = arr.Length;
int
k = 1;
Console.WriteLine(minSize(arr, n, k));
}
}