dalao们能帮我卡常吗
  • 板块题目总版
  • 楼主S0CRiA
  • 当前回复17
  • 已保存回复17
  • 发布时间2021/7/5 09:36
  • 上次更新2023/11/4 18:38:02
查看原帖
dalao们能帮我卡常吗
390770
S0CRiA楼主2021/7/5 09:36

rt

//acwing171
#include <algorithm>
#include <cstdio>
#include <vector>
using namespace std;
typedef long long ll;

vector<ll> lv,rv;
ll w,g[50],ans;
int n;

inline void dfs(int l,int r,ll sum,vector<ll> &v){
	if(sum>w) return;
	if(l==r+1){ v.push_back(sum); return; }
	dfs(l+1,r,sum+g[l],v),dfs(l+1,r,sum,v);
	return;
}

int main(){
	scanf("%lld%d",&w,&n);
	for(register int i=1; i<=n; ++i) scanf("%lld",&g[i]);
	int mid=(n+1)>>1; dfs(1,mid,0,lv); dfs(mid+1,n,0,rv);
	sort(lv.begin(),lv.end()); sort(rv.begin(),rv.end());
	for(register int i=0,j=lv.size()-1; i<rv.size(); ++i){
		while(j&&rv[i]+lv[j]>w) --j;
		ans=max(ans,rv[i]+lv[j]);
	}
	printf("%lld",ans);
	return 0;
}

题目

2021/7/5 09:36
加载中...