【鄭輕】[1899]985的最大和難題

1899: 985的最大和難題

Time Limit: 1 Sec  Memory Limit: 128 MB

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


n=3時的負數變化

(0爲負數1爲正數)
有一個:
0 1 1 1 1
1 0 0 1 1
1 0 1 0 0
1 1 1 1 1
有兩個:
0 0 1 1 1
0 1 0 0 1

1 1 1 1 1
有三個:
0 0 0 1 1

1 1 1 1 1

總結規律:


負數 正數
0 2n-1
n-1
1 2n-2
n-1 n
2n-4
n-3  n+2
…… ……

可發現若n爲奇數時

總可以把負數全部變爲正數

當n爲偶數時

每次能改變偶數個負數

所以若負數的個數爲偶數個

也能全部變爲正數

當負數的個數爲奇數個

總會留下一個數爲負數

(但不一定是原來就有的負數)

爲了讓總和最大

可以使絕對值最小的數爲負數


#include<stdio.h> 
int main() { 
    int T; 
    scanf("%d",&T); 
    while(T--) { 
        int n; 
        scanf("%d",&n); 
        int l=2*n-1; 
        int sum=0,cnt=0,res=99999999; 
        for(int i=0; i<l; i++) { 
            int t; 
            scanf("%d",&t); 
            if(t<0) { 
                cnt++; 
                t=-t; 
            } 
            if(res>t) 
                res=t; 
            sum+=t; 
        } 
        if(n&1||cnt%2==0) 
            printf("%d\n",sum); 
        else
            printf("%d\n",sum-2*res); 
    } 
    return 0; 
} 

題目地址:【鄭輕】[1899]985的最大和難題

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章