zzulioj 1899(985的最大和难题)
2016-08-09 09:26
387 查看
985的最大和难题
Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 285 Solved: 29
SubmitStatusWeb 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
题解:通过认真仔细的观察(别人的代码),我发现了一个规律,就是当n 为奇数或者 负数的个数为偶数时 可以把所有数都变成偶数,否则就只需要减去一个绝对值最小的就好了
Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 285 Solved: 29
SubmitStatusWeb 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
题解:通过认真仔细的观察(别人的代码),我发现了一个规律,就是当n 为奇数或者 负数的个数为偶数时 可以把所有数都变成偶数,否则就只需要减去一个绝对值最小的就好了
#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; #define M 10010 #define INF 0x3f3f3f int abs(int a) { return a > 0 ? a : (-a); } int main() { int n, t, sum, mina, a; scanf("%d", &t); while(t--) { scanf("%d", &n); sum = 0; mina = INF; int k = 0; for(int i=1; i<=2*n-1; i++) { scanf("%d", &a); if(a >= 0) { sum += a; } else { k++; sum -= a; } mina = min(mina, abs(a)); } if(n & 1 || !(k & 1))//是奇数则全部都可以变成正的 ,或者 k 为偶数个时 { printf("%d\n", sum); } else//是偶数并且 k 为 奇数时就有一个不能变成正的 { printf("%d\n", sum-2 * mina);//减去两倍的最小值,因为之前加了 } } return 0; }
相关文章推荐
- 【zzuliOJ】1899 - 985的最大和难题(思维,好题)
- zzulioj 1899: 985的最大和难题 [规律]
- zzulioj1899 985的最大和难题(思维)
- zzulioj-1899-985的最大和难题【思维】
- 1899: 985的最大和难题
- zzuli 1899 985的最大和难题
- 【郑轻】[1899]985的最大和难题
- zzuli 1899: 985的最大和难题
- 1899: 985的最大和难题(好题)
- 【zzuli-oj】-1899-985的最大和难题(思维,好)
- ZZULI OJ 1899 985的最大和难题
- zzuli 1899 Problem H: 985的最大和难题
- 郑轻OJ/ ZZULIOJ 1899 985的最大和难题(思维)
- 郑轻 1899 985的最大和难题
- 1899: 985的最大和难题
- ZZULIOJ-1894-985的方格难题(BFS&规律&DP)
- zzulioj 1896 985的买饮料难题
- zzulioj1895: 985的0-1串难题(思维)
- hpu-【1018: 985的最大和难题】
- 【多校训练】ZZULIOJ 1894 985的方格难题