题目描述
给定一个长度为 n 的整数数组 a1,a2,…,an。
现在,需要你对数组中的每个元素进行分类。
每个元素要么划分至 b 类,要么划分至 c 类。
我们设所有 b 类元素的相加之和为 sumb,所有 c 类元素的相加之和为 sumc。
请你计算 sumb−sumc 的最大可能值。
如果某类元素的个数为 0,则该类元素的相加之和视为 0。
输入格式
第一行包含整数 n。
第二行包含 n 个整数 a1,a2,…,an。
输出格式
输出一个整数,表示 sumb−sumc 的最大可能值。
数据范围
前三个测试点满足 1≤n≤10。
所有测试点满足 1≤n≤100,−100≤ai≤100。
输入样例:
3
1 -2 0
输出样例:
3
算法
(分组存放)
既然要求相减最大值,那就把负数放到sumc中那么减去
sumc时相当于加上这个数的相反数,那么就能让sumb-s
umc的值最大,如果没有负数的话就直接把所有数都加在
sumb里,这时也是最大。
C++ 代码
#include <iostream>
#include <cstdio>
using namespace std;
const int N=1e3+10;//数据范围较小,所以1e3足够了。
int a[N],sumb,sumc;
int main()
{
int n;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a[i];//输入这些数。
if(a[i]<=0)
sumc+=a[i];//一边输入一边处理这些数,按上述思路放入相应的sum中。
else
sumb+=a[i];
}
cout<<sumb-sumc<<endl;
return 0;
}
这种方法较为简陋,但适合像我一样的新手,容易想到,
有不正确的希望大佬们指出。