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