如代码所示,注释的那一句是优化,但加
#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。。为什么会错误