zzulioj1899 985的最大和难题(思维)
来源:互联网 发布:jenkins mac slave 编辑:程序博客网 时间:2024/06/14 00:21
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
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为奇数的话那么所有的数都可以变成正数,如果n为偶数负数的个数也为偶数的话,所有的负数也可以全部转化为正数,如果n为偶数负数的个数为奇数的话,只剩一个负数无法转化。所以分类讨论,开始直接算出所有数绝对值的和,然后判断,前两种情况直接输出ans,最后一种输出ans减去两个绝对值最小的那个数(因为ans为所有绝对值和包含了第一个数的绝对值,如果有一个无法转变,则需要减去两个)
代码:
#include<stdio.h> #include<iostream> #include<algorithm> #include<string.h>using namespace std; int main() { int t,a[3010],b[3010]; scanf("%d",&t); while(t--) { memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); int n; scanf("%d",&n); int sum=2*n-1; long long ans=0; int fu=0; for(int i=0;i<sum;i++) { scanf("%d",&a[i]); b[i]=abs(a[i]); ans+=b[i]; if(a[i]<0) fu++; } sort(b,b+sum); if(n&1||(n%2==0&&fu%2==0)) printf("%d\n",ans); else printf("%d\n",ans-2*b[0]); } return 0; }
0 0
- zzulioj1899 985的最大和难题(思维)
- zzulioj-1899-985的最大和难题【思维】
- 【hpu oj 1018 985的最大和难题 [思维]】
- 【zzuliOJ】1899 - 985的最大和难题(思维,好题)
- 郑轻OJ/ ZZULIOJ 1899 985的最大和难题(思维)
- 【zzuli-oj】-1899-985的最大和难题(思维,好)
- 985的最大和难题
- 985的最大和难题
- zzulioj1898 985的数字难题(思维)
- 【985系列】985的最大和难题
- 1899: 985的最大和难题(好题)
- 【zzulioj 1899 985的最大和难题】
- zzuli 1899: 985的最大和难题
- zzuli 1899 985的最大和难题
- zzulioj 1899(985的最大和难题)
- 1899: 985的最大和难题
- 1899: 985的最大和难题
- hpu-【1018: 985的最大和难题】
- php://input 获取数据
- Android最新 代号、版本和API Levels对应关系
- 初学驱动开发-windows驱动-键盘过滤驱动
- Adidas F50 FG Baratas discovers the lady does
- nsobjcruntime.h 报错
- zzulioj1899 985的最大和难题(思维)
- iso14443 非接触式IC卡协议
- 浏览器数据清理
- 线程传递 HttpServletRquest 的问题
- 程序员最容易犯的错误总结
- lruCache的用法
- [USACO Training] Section 1.4
- 关于学术论文的参考文献格式
- ORACLE 删除重复数据