萌新刚学搜索
查看原帖
萌新刚学搜索
604231
dongshucheng楼主2024/7/12 14:57
#include<bits/stdc++.h>
#define int long long
#define maxn 1000
using namespace std;
int n,T;
int a[maxn];
int cnt1=0,cnt2=0,ans=0,mid;
int sum1[1<<25],sum2[1<<25];
void dfs1(int st,int ed,int sum) {
    if(sum>T) return ;
    if(st>ed) {
        if(sum<T) sum1[++cnt1]=sum;
        return ;
    }
    dfs1(st+1,ed,sum);dfs1(st+1,ed,sum+a[st]);
}
void dfs2(int st,int ed,int sum) {
    if(sum>T) return ;
    if(st>ed) {
        if(sum<T) sum2[++cnt2]=sum;
        return ;
    }
    dfs2(st+1,ed,sum);dfs2(st+1,ed,sum+a[st]);
}
signed main(){
    scanf("%lld %lld",&n,&T);mid=n>>1;
    for(int i=1;i<=n;i++) scanf("%lld",&a[i]);
    dfs1(1,mid,0);dfs2(mid+1,n,0);
    sort(sum1+1,sum1+cnt1+1);
    for(int i=1;i<=cnt2;i++) {
        int num=upper_bound(sum1+1,sum1+cnt1+1,T-sum2[i])-sum1-1;
        ans=max(ans,sum2[i]+sum1[num]);
    }
    printf("%lld",ans);
    return 0;
}
2024/7/12 14:57
加载中...