比赛 20160420s 评测结果 AAAAAAAAAA
题目名称 买汽水 最终得分 100
用户昵称 bhiaibogf 运行时间 0.510 s
代码语言 C++ 内存使用 0.28 MiB
提交时间 2016-04-20 11:45:56
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;

int n,m,ans=0x3f3f3f3f;
int a[45],mid;
vector<int> q[2];

void DFS(int _,int k,int res){
    q[_].push_back(res);
    if(_?(k<n):(k<mid)){
        if(res+a[k]<=m) DFS(_,k+1,res+a[k]);
        DFS(_,k+1,res);
    }
}

int main(){
#ifdef bhiaibogf
    freopen("in.in","r",stdin);
#else
    freopen("drink.in","r",stdin);
    freopen("drink.out","w",stdout);
#endif
    cin>>n>>m;
    for(int i=0;i<n;i++) cin>>a[i];
    mid=n>>1;
    DFS(0,0,0); DFS(1,mid,0);
    sort(q[0].begin(),q[0].end());
    sort(q[1].begin(),q[1].end());
    //for(int i=0;i<q[0].size();i++) cout<<q[0][i]<<' ';puts("");
    //for(int i=0;i<q[1].size();i++) cout<<q[1][i]<<' ';puts("");
    int ans=0,j=q[1].size()-1;
    for(int i=0;i<q[0].size();i++){
        for(;~j && q[0][i]+q[1][j]>m;j--);
        if(j<0) break;
        ans=max(ans,q[0][i]+q[1][j]);
    }
    cout<<ans<<endl;
    return 0;
}