求助关于搜索剪枝
查看原帖
求助关于搜索剪枝
432183
JoeBiden2020楼主2021/11/19 18:23

如代码所示,注释的那一句是优化,但加

#include<bits/stdc++.h>
using namespace std;
int v[2000],w[2000],n,m,s[2000],ans=-1;
void dfs(int ck,int cur,int ww){
//	if(cur+s[n]-s[ck]<ans)return;如果后面所有加起来都不行,搜索显然失败
	if(w<=0&&cur<ans)return;
	if(ck==n+1){
		ans=max(ans,cur);
		return;
	}
	if(ww+w[ck]<=m)dfs(ck+1,cur+v[ck],ww+w[ck]); 
	dfs(ck+1,cur,ww);
}
int main(){
	cin>>m>>n;
	for(int i=1;i<=n;i++){
		cin>>w[i]>>v[i];
		s[i]=s[i-1]+v[i];
	}
	dfs(0,0,0);
	cout<<ans;
	return 0;
} 

上后后七个点还是超时且第三个点WA。。为什么会错误

2021/11/19 18:23
加载中...