您的位置:首页 > 其它

codeforces 797B Odd sum

2017-05-22 19:41 344 查看
题意:给定一个整型序列,求得其中一个子序列,其和为奇数,且和是所有子序列中最大的。输入的数据保证一定包含和为奇数的子序列

思路:所有正数相加得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));
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: