题目:
给一个长度为n的整数序列,从中挑出一些数,使它们的和最大并且为奇数。
题解:
先判断每一个数,如果是奇数就存入vector,偶数就直接加到sum,然后降序排序,先加a[0]保证sum是奇数,后面每两个在一起加一次,如果大于零就加到sum,小于零就直接可以break。
代码:
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+1;
int a[N];
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
int sum=0;
vector<int> v;
int m;
int n;cin>>n;while(n--){
cin>>m;
if(abs(m%2))
v.push_back(m); //存奇数
else
sum+=max(0,m);//加正偶数
}
sort(v.rbegin(),v.rend());
sum+=v[0];
for(int i = 2; i < (int) v.size(); i += 2){
if(v[i] + v[i - 1] > 0)
sum += v[i] + v[i - 1];
else
break;
}
cout<<sum<<endl;
return 0;
}