Yaroslav and Sequence
题意:共有2*n-1个数,每次可以将任意n个数改变为其相反数即 x -> (-x);问最后能得到的数列的最大和是多少;
思路:当n为奇数时,无论数列中有多少负数,多可以将所有数变为非负整数;
当n为偶数时,如果数列中有偶数个负数,那么,一定可以把所有负数变为正数;如果有一个负数,变来变去就会只剩下一个数是负数,我们就是让这个数的绝对值最小;
要考虑0吗?不用!如果有0,绝对值最小的不就是0嘛!!!
#include <bits/stdc++.h>
using namespace std;
vector<int> a, b;
int main(){
int n;
scanf("%d", &n);
int sum=0, minn=10000;
for(int i=0; i<2*n-1; i++){
int x;
scanf("%d", &x);
if(x>0) a.push_back(x);
else if(x<0) b.push_back(x);
sum+=abs(x);
minn=min(minn, abs(x));
}
int cnt_1=a.size(), cnt_2=b.size(), cnt_0=n-cnt_1-cnt_2;
if(n%2!=0||cnt_2%2==0) printf("%d\n", sum);
else{
printf("%d\n", sum-2*minn);
}
return 0;
}