import
java.util.HashMap;
import
java.util.Map;
public
class
Main {
static
Map<Integer, Integer> dp =
new
HashMap<>();
public
static
int
solver(
int
[] numbers,
int
l,
int
r,
int
k) {
if
(l > r) {
return
0
;
}
int
key = (l * numbers.length + r) * numbers.length + k;
if
(dp.containsKey(key)) {
return
dp.get(key);
}
while
(r > l && numbers[r] == numbers[r -
1
]) {
r--;
k++;
}
while
(r > l && numbers[l] == numbers[r]) {
l++;
k++;
}
key = (l * numbers.length + r) * numbers.length + k;
dp.put(key, solver(numbers, l, r -
1
,
0
) + (k +
1
) * (k +
1
));
for
(
int
i = l; i < r; i++) {
if
(numbers[i] == numbers[r]) {
while
(i +
1
< r && numbers[i +
1
] == numbers[r]) {
i++;
}
dp.put(key, Math.max(dp.get(key), solver(numbers, l, i, k +
1
) + solver(numbers, i +
1
, r -
1
,
0
)));
}
}
return
dp.get(key);
}
public
static
int
removeNumbers(
int
[] numbers) {
return
solver(numbers,
0
, numbers.length -
1
,
0
);
}
public
static
void
main(String[] args) {
int
[] numbers = {
1
,
2
,
3
,
2
,
1
,
1
,
1
};
System.out.println(removeNumbers(numbers));
}
}