揹包問題(深度優先搜索解法)

揹包問題(深度優先搜索解法)

問題描述:有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;
}



發佈了89 篇原創文章 · 獲贊 80 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章