大佬帮我看看双向广搜为啥不对呀
查看原帖
大佬帮我看看双向广搜为啥不对呀
1395328
zzjccc楼主2025/1/17 17:42
#include<iostream>
#include<algorithm>
using namespace std;
const int N=(1<<20)+1;
long long l[N];
long long r[N];
long long t[50];
long long n,m;
int i=1,j=1;
void dfs(int a,int b,int d,int cnt){
    if(cnt>m){
        return;
    }
    if(d==0&&a>b){
        l[i++]=cnt;
    }
    else if(d==1&&a>b){
        r[j++]=cnt;
    }
    else{
        dfs(a+1,b,d,cnt+t[a]);
        dfs(a+1,b,d,cnt);
    }
}

int compute(){
    int ans=0;
    int a=1,b=j;
    while(a<=i&&b>=1){
        if(l[a]+r[b]<=m){
            ans+=b;
            a++;
        }
        else{
            b--;
        }
    }
    return ans;
}
int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        cin>>t[i];
    }
    dfs(1,n>>1,0,0);
    dfs((n>>1)+1,n,1,0);
    i--;
    j--;
    sort(l+1,l+1+i);
    sort(r+1,r+1+j);
    cout<<compute();
    return 0;
}
2025/1/17 17:42
加载中...