题意:给定一个整型序列,求得其中一个子序列,其和为奇数,且和是所有子序列中最大的。输入的数据保证一定包含和为奇数的子序列
思路:所有正数相加得sum,如果为奇数,sum即答案,否则答案为Max(sum-mi,sum+mx)mi为最小正奇数,mx为最大负奇数
#include<cstdio>
#include<cstring>
#define ll long long
using namespace std;
const int maxn = 1e5+10;
int a[maxn];
int Max(int a,int b){return a>b?a:b;}
int main()
{
int n;
//freopen("in.txt","r",stdin);
while(~scanf("%d",&n))
{
ll sum=0;
int mi,mx;
mi=(1<<30);
mx=-1<<30;
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
if(a[i]>0)sum+=a[i];
if(a[i]>0&&a[i]%2==1&&mi>a[i])
mi=a[i];
if(a[i]<0&&a[i]%2==1||a[i]%2==-1&&mx<a[i])
mx=a[i];
}
if(sum%2)
printf("%d\n",sum);
else
printf("%d\n",Max(sum-mi,sum+mx));
}
}