记录编号 | 252529 | 评测结果 | AAAAAAAAAA | ||
---|---|---|---|---|---|
题目名称 | 买汽水 | 最终得分 | 100 | ||
用户昵称 | 是否通过 | 通过 | |||
代码语言 | C++ | 运行时间 | 0.446 s | ||
提交时间 | 2016-04-20 16:31:19 | 内存使用 | 0.32 MiB | ||
#include<cstdio> #include<deque> #include<algorithm> #include<iostream> using namespace std; const int SIZEN=50; int N,M; int a[SIZEN]; deque<int> Q[2]; void read() { scanf("%d%d",&N,&M); for(int i=1;i<=N;i++) scanf("%d",&a[i]); } bool cmp(int x,int y) { return x>y; } void dfs(int type,int r,int x,int cnt) { if(x>r) { Q[type].push_back(cnt); return; } dfs(type,r,x+1,cnt+a[x]); dfs(type,r,x+1,cnt); } void print(int x) { for(int i=0;i<Q[x].size();i++) cout<<Q[x][i]<<" "; cout<<endl; } void work() { int mid=(1+N)/2; dfs(0,mid,1,0);dfs(1,N,mid+1,0); sort(Q[0].begin(),Q[0].end());sort(Q[1].begin(),Q[1].end()); //print(0);print(1); int i=0,j=Q[1].size()-1; int ans=0; while(i!=Q[0].size()&&j!=-1) { while(j!=-1&&Q[0][i]+Q[1][j]>M) j--; if(j!=-1) ans=max(ans,Q[0][i]+Q[1][j]); else break; i++; //cout<<i<<" "<<j<<endl; } printf("%d\n",ans); } int main() { freopen("drink.in","r",stdin); freopen("drink.out","w",stdout); read(); work(); return 0; }