#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1010, M = 10010;
ll n, C;
ll a[N];
ll s1[M], s2[M], cnt1, cnt2;
void dfs(int l, int r, ll s, ll v[], ll &cnt){
if(s > C) return;
if(l > r){
v[++cnt] = s;
return;
}
dfs(l + 1, r, s, v, cnt);
dfs(l + 1, r, s + a[l], v, cnt);
}
int main(){
cin >> n >> C;
for(int i = 1; i <= n; i++){
cin >> a[i];
}
dfs(1, n / 2, 0, s1, cnt1);
dfs(n / 2 + 1, n, 0, s2, cnt2);
sort(s1 + 1, s1 + 1 + cnt1);
sort(s2 + 1, s2 + 1 + cnt2);
ll maxa = -1;
for(int i = 1; i <= cnt2; i++){
int t = C - s2[i];
ll *p = upper_bound(s1 + 1, s1 + 1 + cnt2, t) - 1;
maxa = max(maxa, *p);
}
cout << maxa << endl;
return 0;
}
我借鉴了https://www.luogu.com.cn/blog/HPXXZYY-YingyeZhu/solution-p5194,改了一些,帮忙看看哪里错了,谢谢了