小塔在研究一个有趣的数组翻转操作问题,其中为了考虑均衡,他会同时翻转相邻两个数。他有一个长度为N的数组a[],并可以进行任意次操作:选择相邻的两个数,翻转这两个数的符号,即将a[i]和a[i+1](0≤i<n−1)的符号都翻转。符号翻转的意思是正数变负数,负数变正数,在程序中即让num=−num,也即数学中的取相反数;当然0翻转后还是0。小明的任务是找到经过任意次数(可以为0次)这些操作后,能够获得的最大数组和。当然,只要小明觉得有必要,同一个数也可以被反复选择。
一种直观的想法是将数组中的所有数都反转为正数,这样数组的和就会最大。由于一个数可以被反转多次,我们可以从前往后依次将每个数反转为正数。然而,因为每次只能反转相邻的两个数,如果数组中负数的个数是奇数,那么必然有一个数无法变为正数。为了使数组和最大,我们可以选择让绝对值最小的数保持为负数,这样得到的数组和就是最大的。