Пример #1
0
int main(){
    int n;cin>>n;
    for(int i=0;i<n;++i){
        int t;cin>>t;
        if(t&1)o.pb(t);
        else e.pb(t);
    }
    sort(o.begin(),o.end()); reverse(o.begin(),o.end());
    // sort(e.begin(),e.end()); reverse(e.begin(),e.end());
    int mx=o[0],now=o[0];
    for(int i=1;i+1<o.size();i+=2){
        now+=o[i]+o[i+1];
        mx=max(mx,now);
    }
    for(int i:e)if(i>0)mx+=i;
    cout<<mx<<endl;
}
Пример #2
0
void even(int n){
    int ptr=upper_bound(p.begin(),p.end(),n>>1)-p.begin()-1;
    while(ptr>=0){
        if(sp.find(n-p[ptr])!=sp.end()){
            printf("2 %d %d\n",p[ptr],n-p[ptr]);
            return;
        } --ptr;
    }
}
Пример #3
0
int main(){
    int ts; cin>>ts; while(ts--){
        pos.clear();
        int n,k; cin>>n>>k; for(int i=0,t;i<n;++i){
            cin>>t; pos.pb(t);
        } sort(pos.begin(),pos.end());
        int L=0,R=1000000000,M; while(R>L){
            M=(L+R)>>1; if(can(M,k))R=M;
            else L=M+1;
        } cout<<L<<endl;
    }
}
Пример #4
0
bool dfs(int n,int lft){
    if(lft==1){
        if(sp.find(n)!=sp.end()){
            oa[0]=n;return 1;
        } return 0;
    }
    else if(lft==2){
        int ptr=upper_bound(p.begin(),p.end(),n>>1)-p.begin()-1;
        while(ptr>=0){
            oa[1]=p[ptr];
            if(dfs(n-p[ptr],lft-1))return 1;
        } --ptr;
        return 0;
    }