1899: 985的最大和难题
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 291 Solved: 31
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
221 1 12-10 20 -10
Sample Output
340
看注释吧,注释的很清楚了。
//补题补提,宇神好题不解释
#include<stdio.h>
#include<stdlib.h>
#include<iostream>
#include<algorithm>
using namespace std;
const int M = 1e3+10;
int a[2*M-1];
int n,sum,flag,t;
int main()
{
scanf("%d",&t);
while(t--){
flag =0; sum = 0;//记录负数个数和最大和
scanf("%d",&n);
for(int i=0; i<2*n-1; i++){
scanf("%d",&a[i]);
if(a[i]<0){
a[i] = -a[i];flag++;
}
sum += a[i];
}
sort(a,a+(2*n-1));
if(n%2 == 1){//n为奇数则所有负数都可以消去
printf("%d\n",sum); continue;
}
else{
if(flag%2 == 1){//n为偶数且有奇数个负数的话不能全消去会剩一个 全变成正数后把最小的那个数变为负数 减回去
sum = sum-2*a[0];
}
printf("%d\n",sum); continue;
}
}
return 0;
}