10tps求调
  • 板块题目总版
  • 楼主DGFLSzfd
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/8/26 16:23
  • 上次更新2024/8/26 16:34:17
查看原帖
10tps求调
981551
DGFLSzfd楼主2024/8/26 16:23

第一次写双向搜索。先写了一个普通的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;
}
2024/8/26 16:23
加载中...