- 题目描述:
-
题意概述:给你n个数,要你它们子序列中求和为奇数的序列的最大值。
-
解题思路:如果数为偶数且大于0则肯定要选,奇数则讨论。对所有的奇数按最大值排序后求和,那么每加一个奇数就更新一下最大值。
-
AC代码:
#include <bits/stdc++.h> #define INF 0x3f3f3f3f #define maxn 100100 #define lson root << 1 #define rson root << 1 | 1 #define lent (t[root].r - t[root].l + 1) #define lenl (t[lson].r - t[lson].l + 1) #define lenr (t[rson].r - t[rson].l + 1) #define N 1111 #define eps 1e-6 #define pi acos(-1.0) #define e exp(1.0) using namespace std; const int mod = 1e9 + 7; typedef long long ll; typedef unsigned long long ull; vector<int> odd; int main() { #ifndef ONLINE_JUDGE freopen("in.txt", "r", stdin); freopen("out.txt", "w", stdout); long _begin_time = clock(); #endif int n; while (~scanf("%d", &n)) { odd.clear(); int ans = 0; for (int i = 0; i < n; ++i) { int x; scanf("%d", &x); if (x & 1) odd.push_back(x); else if (x > 0) ans += x; } sort(odd.begin(), odd.end(), greater<int>()); int sz = odd.size(); int sum = 0, res = -INF; for (int i = 0; i < sz; i++) { sum += odd[i]; if (sum & 1) res = max(res, sum + ans); } printf("%d\n", res); } #ifndef ONLINE_JUDGE long _end_time = clock(); printf("time = %ld ms.", _end_time - _begin_time); #endif return 0; }
CF - 797B. Odd sum - 贪心
最新推荐文章于 2019-07-27 09:59:19 发布