time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output
You are given sequence a1, a2, …, an of integer numbers of length n. Your task is to find such subsequence that its sum is odd and maximum among all such subsequences. It’s guaranteed that given sequence contains subsequence with odd sum.
Subsequence is a sequence that can be derived from another sequence by deleting some elements without changing the order of the remaining elements.
You should write a program which finds sum of the best subsequence.
Input
The first line contains integer number n (1 ≤ n ≤ 105).
The second line contains n integer numbers a1, a2, …, an ( - 104 ≤ ai ≤ 104). The sequence contains at least one subsequence with odd sum.
Output
Print sum of resulting subseqeuence.
Examples
Input
4
-2 2 -3 1
Output
3
Input
3
2 -5 -3
Output
-1
Note
In the first example sum of the second and the fourth elements is 3.
题解:主要原理是奇数个奇数相加为奇数,偶数个奇数相加为偶数,所以我们找出所有的奇数进行排序之后,先加上最大的奇数,然后每两个奇数相加为正数时,加上这两个奇数,否则直接break就好了.还要加上所有大于零的偶数.
代码如下:
#include <bits/stdc++.h>
#define manx 100005
using namespace std;
bool cmp(int a,int b)
{
return a > b;
}
int main()
{
int a[manx],l,n,x;
while(~scanf("%d",&n)){
memset(a,0,sizeof(a));
l=0;
int sum=0;
for (int i=0; i<n; i++){
scanf("%d",&x);
if (x%2) a[l++]=x; //odd
else if (x > 0) sum+=x;
}
sort(a,a+l,cmp);
sum+=a[0];
for (int i=1; i<l-1; i+=2){
if (a[i] + a[i+1] >= 0) sum+=a[i]+a[i+1];
}
printf("%d\n",sum);
}
return 0;
}
本文介绍了一种算法,用于解决寻找整数序列中具有最大奇数和的子序列的问题。通过筛选并排序所有奇数元素,再结合非负偶数元素,找到满足条件的最大和。

被折叠的 条评论
为什么被折叠?



