思路

这题需要将 nn 个整数相邻两个进行加减运算,问最大是多少。但实际上就是在 nn 个数字间填上加减号,求最大值。
加一个整数原数变大,减一个负数原数变小。
但算式开头默认有个加号,所以第一个数必须要加上,不管它是否是负数。
我们定义一个 ss,存储 aa 数组中最大的和,然后去遍历 aa 数组。
如果 ai0a_i \ge 0,那么就将 ss 增加 aia_i
如果 ai0a_i \le 0,那么就将 ss 减少 aia_i
但要注意,当 i=1i=1 时,必须将 ss 增加 aia_i

提醒

还是那句话:十年 OI 一场空,不开 long long 见祖宗。
再提醒一句:第一个数只能加上!我在月赛过程中就因为这个 Boom 0 了无数次!

代码

#include<iostream>
using namespace std;
long long n,a[100005],s;
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    for(int i=1;i<=n;i++){
        if(a[i]>=0){
            s+=a[i]; //正数就加
        }else if(i!=1){
            s-=a[i]; //负数就减
        }else{
            s+=a[i]; //第一个只能加上!
        }
    }
    cout<<s<<endl;
    return 0;
}