比赛 |
20160420s |
评测结果 |
AAAAAAAAAA |
题目名称 |
买汽水 |
最终得分 |
100 |
用户昵称 |
asddddd |
运行时间 |
0.374 s |
代码语言 |
C++ |
内存使用 |
0.31 MiB |
提交时间 |
2016-04-20 11:34:28 |
显示代码纯文本
//
// main.cpp
// 买汽水
//
// Created by Qing Liu on 16/4/20.
// Copyright © 2016年 Qing Liu. All rights reserved.
//
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <set>
#define maxn 41
using namespace std;
set<int>asd1,asd2;
bool used[maxn];
int hahaha[maxn];
int m;
void DFS1(int a,int b,int ans){
if (ans>m) {
return;
}
if (a==b+1) {
asd1.insert(ans);
return;
}
ans+=hahaha[a];
DFS1(a+1, b, ans);
ans-=hahaha[a];
DFS1(a+1, b, ans);
}
void DFS2(int a,int b,int ans){
if (ans>m) {
return ;
}
if (a==b+1) {
asd2.insert(ans);
return;
}
ans+=hahaha[a];
DFS2(a+1, b, ans);
ans-=hahaha[a];
DFS2(a+1, b, ans);
}
void init(){
int n;
cin>>n>>m;
for (int i=0; i<n; i++) {
cin>>hahaha[i];
}
DFS1(0, n/2, 0);
DFS2(n/2+1, n-1, 0);
}
int main() {
freopen("drink.in","r",stdin);
freopen("drink.out","w",stdout);
init();
int maxx=0;
set<int>::iterator it=asd1.begin();
for (; it!=asd1.end(); it++) {
int a=*it;
maxx=max(maxx,a);
int b=m-a;
set<int>::iterator k=asd2.upper_bound(b);
k--;
a+=*k;
if(a>m)
continue;
maxx=max(a,maxx);
}
cout<<maxx;
return 0;
}