本篇博文着重用dfs解决著名的背包问题
01背包问题要点在:选与不选。所以我们很容易联想到dfs来解决这个问题!
下面我们来看看是如何实现的:
<strong><span style="font-size:24px;"><strong>#include<iostream>
using namespace std;
const int N=30;
int w[N],value[N],n,maxvalue=0,V;
void dfs(int index,int sumw,int sumv)
{
if(index>n)
{
if(sumw<=V&&sumv>maxvalue)
{
maxvalue=sumv;
}
return;
}
dfs(index+1,sumw+w[index],sumv+value[index]);//选
dfs(index+1,sumw,sumv);//不选
}
int main()
{
cin>>n>>V;
for(int i=1;i<=n;++i)
{
cin>>w[i];
}
for(int i=1;i<=n;++i)
{
cin>>value[i];
}
dfs(1,0,0);
cout<<maxvalue<<endl;
return 0;
}</strong></