揹包問題(深度優先搜索解法)
問題描述:有n件物品,每件物品的重量爲W[i],價值爲C[i].現在需要選出若干物件放入一個容器量爲V的揹包中,使得在選入揹包的物品重量和不超過V的前提下,讓揹包中的物品價值之和最大,求最大價值(1<=n<=20)
代碼:
#include<stdio.h>
const int maxn=30;
int n,v,maxValue=0;
int w[maxn],c[maxn];
void DFS(int index,int sumW,int sumC)
{
if(index==n)
{
return;//已經完成對n件物品的選擇
}
DFS(index+1,sumW,sumC);//不選第index件物品
if(sumW+w[index]<=v)
{
if(sumC+c[index]>maxValue)//只有加入第index件物品未超過容量V,才能繼續。
{
maxValue=sumC+c[index];//更新最大價值maxValue
}
DFS(index+1,sumW+w[index],sumC+c[index]);//選第index件物品
}
}
int main()
{
scanf("%d%d",&n,&v);
for(int i=0;i<n;i++)
{
scanf("%d",&w[i]);
}
for(int i=0;i<n;i++)
{
scanf("%d",&c[i]);
}
DFS(0,0,0);
printf("%d\n",maxValue);
return 0;
}