题目大意:
有nnn只史莱姆qwq,每只史莱姆有一个分数,每次一只史莱姆可以吞掉左边的或者右边的史莱姆(要是有的话),然后ta的分数会减去被吞的史莱姆的分数,问最后剩下的史莱姆分数最大为多少
输入格式:
第一行一个整数nnn
第二行nnn个整数,表示史莱姆的分数
输出格式:
一个整数,即最大分数
对于这道题来说,我们发现如果序列中有正有负,答案就是所有数的绝对值之和。 否则,答案就是绝对值之和减去绝对值中的最小值的 222 倍。
Code:
#include<cstdio> #include<cmath> #include<algorithm> using namespace std; long long minv = 1000000000000; long long sumv = 0; int positive, negative; int main() { int n; scanf("%d",&n); if(n == 1){ long long a; scanf("%lld",&a); printf("%lld",a); return 0;} for(int i = 1;i <= n; ++i) { long long a; scanf("%lld",&a); if(a > 0) ++positive; if(a < 0) ++negative; sumv += abs(a); minv = min(minv, abs(a)); } if(positive && negative) printf("%lld",sumv); else printf("%lld",sumv - 2 *minv); return 0; }