比赛 |
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;
}