RE求助
查看原帖
RE求助
1421527
ChenHaoQi楼主2025/1/16 13:13

感觉思路没错但是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;
}
2025/1/16 13:13
加载中...