背包问题-堆栈-找出其中一组解(总体积为T,n件物品体积分别是w1,w2,...,w2n,找出若干件恰好装满背包)

问题描述:

总体积为T的背包,n件物品体积分别是w1,w2,...,wn,找出若干件恰好装满背包。找出满足条件的解。

例如,当T=10时,各件物品的体积时{1,8,4,3,5,2}时,可找到下列4组解:

(1,4,3,2),(8,2),(1,4,5),(3,5,2)。

提示:

(1)将物品顺序选取到背包中。假设选取了钱i件物品之后背包还没有装满,则继续选取第i+1件物品。

(2)若改件物品太大,不能装入,则弃之选取下一件,直至背包装满为止。

(3)但如果在剩余的物品中找不到合适的物品填满背包,则说明刚刚装入背包的那件物品不合适,应该将它取出来,继续从它的后面选取。

(4)如此重复,直到求的满足的条件的解,或者无解。


#include

//结构体,里面有相应的物品的体积,和该物品所在数组的下标值
typedef struct
{	
	int index;//下标
	int data;//体积
}datatype;

int findway(int tatol,datatype weight[])
{
	int lensize=6,top=0;
	int i,j;
	datatype stack[6];
	int T=tatol; //T为背包剩余体积

	for(i=0;i=0)//
	{
		if(T==0)//剩余体积为0时,返回物品体积大小序列
		{
			for(j=0;j0)//检查过一遍,还是T>0,退栈,在退栈的那个物品的下一个开始找气
			{
				top--;
				j=stack[top].index+1;
				T=T+stack[top].data;
			}
		}
	}

}

void main()
{
	int tatol=10;
	int size[]={8,1,4,3,5,5};

	datatype weight[10];
	for(int i=0;i<6;i++)
	{
		weight[i].index=i;
		weight[i].data=size[i];
	}


	findway(tatol,weight);
}




你可能感兴趣的:(leetcode)