请求添加hack数据
查看原帖
请求添加hack数据
777756
UFOI楼主2023/6/6 08:50

rt,这份双向搜索的代码可以通过本题,然而这份代码的剪枝是错的,hack数据如下:

in:
1 1
1

out : 0
true out : 1
#include<iostream>
#include<algorithm>
#define int long long
using namespace std;
int n,c,a[1001],s1[1048576],s2[1048576],ans,c1,c2;
void dfs1(int now,int wei){
    if(wei>=c) return;
    if(now==n/2+1){
        s1[++c1]=wei;
        return;
    }
    dfs1(now+1,wei+a[now]);
    dfs1(now+1,wei);
}
void dfs2(int now,int wei){
    if(wei>=c) return;
    if(now==n+1){
        s2[++c2]=wei;
        return;
    }
    dfs2(now+1,wei+a[now]);
    dfs2(now+1,wei);
}
signed main(){
    cin>>n>>c;
    for(int i=1;i<=n;i++) cin>>a[i];
    dfs1(1,0);
    dfs2(n/2+1,0);
    sort(s1+1,s1+1+c1);
    ans=s1[c1];
    for(int i=1;i<=c2;i++){
        int x=c-s2[i];
        int k=upper_bound(s1+1,s1+c1+1,x)-s1-1;
        ans=max(ans,s1[k]+s2[i]);
    }
    cout<<ans;
}
2023/6/6 08:50
加载中...