感觉思路没错但是RE(0pts)
#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<queue>
#include<stack>
#include<vector>
#include<iomanip>
#include<cmath>
#include<list>
#include<cctype>
#include<string.h>
#define y1 yy1
#define time tims
using namespace std;
const int maxn=50;
int g[maxn+1];
int n;
long long w;
vector<long long> va,vb;
void dfs(int l,int r,long long sum,bool flag){
if(l>r){
if(sum<=w){
if(flag==false) va.push_back(sum);
else vb.push_back(sum);
return;
}
}
dfs(l+1,r,sum+g[l],flag);
dfs(l+1,r,sum,flag);
}
int main(){
cin>>w>>n;
for(int i=1; i<=n; i++){
cin>>g[i];
}
dfs(1,(1+n)/2,0,false);
dfs((1+n)/2+1,n,0,true);
sort(vb.begin(),vb.end());
long long ans=0;
for(int i=0; i<va.size(); i++){
int l=0,r=vb.size()-1,a=0;
while(l<=r){
int mid=(l+r)/2;
if(vb[mid]+va[i]<=w) l=mid+1,a=mid;
else r=mid-1;
}
ans=max(ans,va[i]+vb[a]);
}
cout<<ans;
return 0;
}