1899: 985的最大和难题
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 298 Solved: 34
Submit Status Web Board
Description
985有2 * n - 1个整数,他每次可以将其中n个数变号,操作次数不限,问他可以得到的最大和。
Input
第一行输入一个整数t,代表有t组测试数据。
每组数据占两行,第一行输入一个整数n,下面一行输入2*n-1个整数a[]。
注:1 <= t <= 32,1 <= n <= 1e3,-1e3 <= a[] <= 1e3。
Output
输出一个整数代表可以得到的最大和。
Sample Input
2 2 1 1 1 2 -10 20 -10
Sample Output
3 40
HINT
Source
1 : 当n是奇数时,方法合理,你就能把全部数列变为正数;
2 :当n不是奇数时,我们要看数列中负数的个数,用x记录下来,现在判断x,如果x是偶数,那么你也能通过变换把他们全部变为正数: 但是x要是奇数的话,始终有一个负数不能变换,那么我们肯定使这个负数的绝对值最小,这样加起来的和才最大。
#include<stdio.h>
#include<string.h>
#include<algorithm>
#define INF 0xfffffff
using namespace std;
int main()
{
int t,n,i,num,x,sum,Min;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
x=0;
Min=INF;
sum=0;
for(i=0;i<2*n-1;i++)
{
scanf("%d",&num);
if(num<0)
x++;
num=abs(num);
sum+=num;
if(Min>num)
Min=num;
}
if(n%2)
printf("%d\n",sum);
else
{
if(x%2==0)
printf("%d\n",sum);
else
{
printf("%d\n",sum-2*Min);
}
}
}
return 0;
}