#CF2053I1. 深情数组(简单版)
深情数组(简单版)
I1. 深情数组(简单版)
单个测试点时间限制:3 秒 内存限制:512 MB
你是字母的起笔,是诗篇的行文,是童话的句点。 —— ilem, 勾指起誓
这是该题的简单版本。两个版本的区别在于:在这个版本中,你只需要计算数组的最小长度。只有当你解决了该题的所有版本时,你才可以进行 hack。
艾瑞斯很珍爱一个整数数组 。她知道这个数组拥有一个有趣的性质:所有元素的绝对值的最大值,不超过数组所有元素的和,即
艾瑞斯定义一个数组的无聊值为该数组的最大子段和。
艾瑞斯的生日快到了,维克托准备送她另一个数组 作为礼物。出于一些看似显而易见的原因,他要求数组 满足以下性质:
- 数组 是 的一个子序列。
- 两个数组的和相等,即
- 数组 的无聊值尽可能小。
- 在所有满足无聊值最小的数组 中,数组 的长度 尽可能小。
在这种情况下,艾瑞斯就能最快领会他的心意!
即使有以上约束,符合条件的礼物数组仍然有很多。所以维克托请你计算出满足所有条件的任意一个数组 的长度 。他保证:如果你成功帮到他,他会分你一小块艾瑞斯的生日蛋糕。
注意:由于输入数据量较大,你可能需要对输入进行加速。
例如在 C++ 中,在 main 函数开头加入以下代码即可:
int main() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr); std::cout.tie(nullptr);
}
定义说明
- 数组 是 的子段(subarray):如果从 的开头删去若干(可以是 0 个)元素、末尾删去若干(可以是 0 个)元素后可以得到 。
- 序列 是 的子序列(subsequence):如果从 中任意位置删去若干(可以是 0 个)元素后可以得到 。
输入格式
每个测试文件包含多组测试数据。 第一行输入一个整数 (),表示测试用例数量。
每组测试用例描述如下:
- 第一行包含一个整数 (),表示数组 的长度。
- 第二行包含 个整数 ()。 保证题目给定条件成立:。
保证所有测试用例的 之和不超过 。
输出格式
对于每组测试用例,输出一行一个整数,表示满足所有条件的合法数组 的长度 。
样例输入
4
4
1 2 3 4
4
2 -3 2 2
10
2 -7 6 3 -1 4 2 -5 8 -4
20
4 -2 4 3 -2 1 5 2 3 6 -5 -1 -4 -2 -3 5 -3 1 -4 1
样例输出
4
6
14
25
样例解释
在第一个测试用例中,。 满足所有条件的数组 只能是 本身,因此输出 。
在第二个测试用例中,。 满足条件的数组 可以是 或 ,因此输出 。