已老实,求剪枝
#include <bits/stdc++.h>
using namespace std;
int n, c;
int a[1001];
long long maxx = -1;
long long sum;
void ssearch(int p, int q) {
for(int i = q + 1; i <= n; ++i) {
if(a[i] < a[p] + a[q]) {
continue;
}
if(sum + a[i] > c) {
maxx = max(maxx, sum);
return ;
}
else {
sum += a[i];
ssearch(q, i);
sum -= a[i];
}
}
maxx = max(maxx, sum);
return ;
}
int main() {
ios::sync_with_stdio(false);
cin >> n >> c;
for(int i = 1; i <= n; ++i) {
cin >> a[i];
if(a[i] > c) {
--n;
}
if(a[i] == c) {
cout << c << endl;
return 0;
}
}
for(int i = 1; i <= n; ++i) {
for(int j = i + 1; j <= n; ++j) {
if(a[i] + a[j] > c) {
break;
}
sum = a[i] + a[j];
ssearch(i, j);
}
}
cout << maxx << endl;
return 0;
}