第一次写双向搜索。先写了一个普通的TLE了,看了题解把我的代码一顿乱改后就WA一堆,RE一个。
实在看不出为什么WA,求dalao调试。
题目P10484 送礼物(绿题)
我的思路参考的题解:题解
#include<bits/stdc++.h>
using namespace std;
const int N=50;
long long w,n,m,a[N],b[N],c[N],ans;
int len;
void dfs1(int k,long long sum)
{
if(sum>w) return ;
if(k==n)
{
c[++c[0]]=sum;
return ;
}
dfs1(k+1,sum+a[k]);
dfs1(k+1,sum);
}
void dfs2(int k,long long sum)
{
if(sum>w) return ;
if(k==m)
{
ans=max(ans,sum+c[lower_bound(c+1,c+len+1,w-sum)-(c+1)]);
return ;
}
dfs2(k+1,sum+b[k]);
dfs2(k+1,sum);
}
int main()
{
cin>>w>>n;
for(int i=0;i<n;i++) cin>>a[i];
sort(a,a+n,greater<int>());
m=n-(n/2);
for(int i=0,j=n-1;i<m;i++,j--) b[i]=a[j];
n/=2;
dfs1(0,0);
sort(c+1,c+c[0]+1);
len=unique(c+1,c+c[0]+1)-(c+1);
dfs2(0,0);
cout<<ans;
}