Yaroslav has an array, consisting of (2·n - 1) integers. In a single operation Yaroslav can change the sign of exactly n elements in the array. In other words, in one operation Yaroslav can select exactly n array elements, and multiply each of them by -1.
Yaroslav is now wondering: what maximum sum of array elements can be obtained if it is allowed to perform any number of described operations?
Help Yaroslav.
The first line contains an integer n (2 ≤ n ≤ 100). The second line contains (2·n - 1) integers — the array elements. The array elements do not exceed 1000 in their absolute value.
In a single line print the answer to the problem — the maximum sum that Yaroslav can get.
2 50 50 50
150
2 -1 -100 -1
100
In the first sample you do not need to change anything. The sum of elements equals 150.
In the second sample you need to change the sign of the first two elements. Then we get the sum of the elements equal to 100.
const int MAX=10000;
int s[MAX];
using namespace std;
int main()
{
int n,i,j,fushu,sum,MIN;
cin>>n;
fushu=0;
sum=0;
MIN=MAX;
for(i=1;i<=2*n-1;i++)
{
cin>>s[i];
if(s[i]<0)
{
fushu+=1;
s[i]=-s[i];
}
if(s[i]<MIN)
MIN=s[i];
sum+=s[i];
}
if(n%2!=0)
{
cout<<sum<<endl;
}
else
{
if(fushu%2!=0)
cout<<sum-MIN*2<<endl;
else
cout<<sum<<endl;
}
return 0;
}//如果有问题,或有什么疑惑,可以在评论中提出,小子我看到一定尽力解答
本文探讨了Yaroslav面对一个包含(2·n-1)个整数的序列时,如何通过有限次操作(每次操作选择n个元素翻转符号)获得最大可能的序列和。文章详细解析了解决方案,并提供了实现该算法的C++代码。
919

被折叠的 条评论
为什么被折叠?



