题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=79857#problem/A
大意:给出一个数n, 然后给出2*n-1的整数。 每次操作可以对其中n数乘以-1, 可以操作任意次, 求2*n-1个整数的最大和
分析:
两种情况:
(1):n为奇数, 我们每次操作就可以增加或减少一个负数,最终使负数的个数为n, 最后在进行一次操作全部变为正数
(2):n为偶数, 我们每次操作就可以增加或减少两个负数,当负数的个数为奇数的时候,最后一定剩余一个负数(所有数中 绝对值最小的数),当负数的个数为偶数的时候, 最后全部可以变为正。
Ac代码:
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int main()
{
int n, m, sum, a, c;
while(~scanf("%d", &n))
{
sum = c = 0;
m = 1001;
int len = 2*n - 1;
for(int i = 0; i < len; i++)
{
scanf("%d", &a);
if(a < 0)
{
c++;
a = -a;
}
m = min(m, a);
sum += a;
}
if(n%2)
printf("%d\n", sum);
else
{
if(c%2)
sum -= 2*m;
printf("%d\n", sum);
}
}
return 0;
}