给定一个长度为 n 的整数数组。
数组中只包含 1 和 −1。
你需要对该数组进行如下操作:
计算该数组中所有元素的和 s。
计算该数组的最小前缀和 x。
输出 s−x 的值。
注意:
数组的最小前缀和 x 有可能为负。
对于任意数组,其前 0 个元素的前缀和为 0。
输入格式
第一行包含整数 n。
第二行包含 n 个整数,表示给定数组。
输出格式
一个整数,表示 s−x 的值。
数据范围
前四个测试点满足 1≤n≤5。
所有测试点满足 1≤n≤100,数组中只包含 1 和 −1。
输入样例1:
3
-1 -1 -1
输出样例1:
0
样例1解释
由给定数组,可以计算得到:
给定数组内所有元素之和为 −3。
给定数组的最小前缀和为 −3。
所以,答案为 0。
输入样例2:
4
1 1 1 1
输出样例2:
4
样例2解释
由给定数组,可以计算得到:
给定数组内所有元素之和为 4。
给定数组的最小前缀和为 0 (前 0 个元素的前缀和)。
所以,答案为 4。
输入样例3:
2
-1 1
输出样例3:
1
输入样例4:
5
1 1 -1 1 1
输出样例4:
3
此题比较简单,考查前缀和问题,具体可查看这篇博客
code:
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 110;
int a[N], s[N];
int x;
int main()
{
int n;
cin >> n;
int sum = 0;
for(int i = 1; i <= n; i ++)
{
cin >> a[i];
sum += a[i];
s[i] = s[i - 1] + a[i];
}
for(int i = 0; i <= n; i ++)
{
x = min(x, s[i]);
}
cout << sum - x << endl;
return 0;
}