01背包问题回溯法c++
时间: 2023-07-03 13:23:02 浏览: 91
beibao.rar_回溯法01背包
以下是 01背包问题 的回溯法 C++ 代码:
```
#include<bits/stdc++.h>
using namespace std;
int n,m;
int w[1010],v[1010];
int ans=0;
void dfs(int now,int tw,int tv){//now为当前物品编号,tw为当前已选物品重量,tv为当前已选物品价值
if(now==n+1){//已选完所有物品
if(tw<=m){//当前方案合法
ans=max(ans,tv);//更新答案
}
return;
}
dfs(now+1,tw,tv);//不选当前物品
dfs(now+1,tw+w[now],tv+v[now]);//选当前物品
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>w[i]>>v[i];
}
dfs(1,0,0);//从第一个物品开始选
cout<<ans<<endl;
return 0;
}
```
该代码使用了深度优先搜索的思想,通过对每个物品的选与不选进行穷举,得到所有可能的方案,并在每次得到新方案时更新最优解。
阅读全文