【CodeForces】【思维题】797 b Odd sum

【题目】http://codeforces.com/problemset/problem/797/B

【题意】给出一串数,取其中的任意个数使得和为奇数,并且和最大。问这个和是多少?数据保证一定有奇数和。

【思路】我还想dp....真是失了智....

只要将所有的正数加起来,

如果这个和是奇数那么这就是答案;

如果这个和是偶数,那么就要将这个数减去最小的正奇数或者加上绝对值最小的负奇数,让这个和变成奇数。

另外注意:负奇数%2=-1

【代码】

#include
#define fuck(x) std::cout<<"["<<#x<<"->"<0)//将所有的正数加起来
            sum+=a[i];
        if(a[i]%2==1||a[i]%2==-1)//找到绝对值最小的奇数
                                 //负奇数%2=-1
        {
            Min=min(Min,abs(a[i]));
        }
    }
    if(sum%2==1)//如果和是奇数那么直接输出
        printf("%d\n",sum);
    else//否则减去绝对值最小的奇数的绝对值
        printf("%d\n",sum-Min);

    return 0;
}

 

你可能感兴趣的:(CodeForces,思维题)