比赛 |
2025.5.4 |
评测结果 |
AAAAAAAAAW |
题目名称 |
送礼物 |
最终得分 |
90 |
用户昵称 |
李奇文 |
运行时间 |
3.284 s |
代码语言 |
C++ |
内存使用 |
38.33 MiB |
提交时间 |
2025-05-04 11:33:03 |
显示代码纯文本
#include<bits/stdc++.h>
#define re register
#define int long long
using namespace std;
const int N=49,M=2e7;
int w,n,ans,endd;
int g[N],hs[M],tb[M];
void dfs(int v,int q,int t){
if(v>w) return;
if(q>endd){
if(t==0) hs[++hs[0]]=v;
else tb[++tb[0]]=v;
return;
}
dfs(v,q+1,t);
dfs(v+g[q],q+1,t);
return;
}
bool cmp(int a,int b){
return a>b;
}
signed main(){
freopen("giftgiving.in","r",stdin);
freopen("giftgiving.out","w",stdout);
scanf("%lld%lld",&w,&n);
for(re int i=1;i<=n;++i){
scanf("%lld",&g[i]);
}
sort(g+1,g+1+n,cmp);
endd=n/2;
dfs(0,1,0);
endd=n;
dfs(0,n/2+1,1);
sort(tb+1,tb+1+tb[0]);
for(re int i=1;i<=hs[0];++i){
ans=max(ans,tb[upper_bound(tb+1,tb+1+tb[0],w-hs[i])-tb-1]+hs[i]);
}
printf("%lld",ans);
return 0;
}