长度n=1e5的数组[-1e5, 1e5]
, 给定一个K
你可以选择某个元素A[i]
,将A[i] 修改为 K
。
修改后,该数组的价值为: 平衡切割的个数。
比如: 长度=3的数组[a, b, c]
,他有2个切割:[a | bc] 和 [ab | c]
(所谓,平衡 即这前后两半 的和 相等)
输出,最大的 平衡切割个数。
比如[3, 3, 3] K= 0
他有3种修改选择:
- 修改A[0],变成:
[0, 3, 3]
,有2个切割[0 | 6]
[3 | 3]
,有1个 平衡切割 - 修改A[1],变成:
[3, 0, 3]
,有2个切割[3 | 3]
[3 | 3]
,有2个 平衡切割 - 修改A[2],变成:
[3, 3, 0]
,有2个切割[3 | 3]
[6 | 0]
,有1个 平衡切割
最优选择是: 修改A[1]后,得到2个 平衡切割。
暴力代码是:
FOR(i, 1, n, 1){
// 枚举 进行修改的元素
auto New = A;
New[i] = K;
int cont = 0;
FOR(j, 1, n-1, 1){
' 切割点 '
if( New[1,...,j] == New[j + 1,..