完全背包问题

完全背包问题 解决方法  跟初级硬币问题递推法 很相似,只需将1改成 对应的数值。

value 背包价值,  v体积,   n种背包, 体积不超过V,最大价值。

void WKnapsack(int *value, int* v, int n, int V)

{     

	int d[1000];

	memset(d, 0, sizeof(int)*1000);

	for(int i = 1; i <= n; i++)

	{

		for(int j = 1; j <= V; j++)  

		{

			if(j >= v[i])

			{

				d[j] = max(d[j],  d[j - v[i]] + value[i]); //1换成value[i]

			}

						

		}

	}

	printf("%d ", d[V]);

}

  

void WKnapsack2(int *value, int* v, int n, int V)//这个比较好理解

{    

	int d[1000];

	memset(d, 0, sizeof(int)* 1000);



		for (int j = 1; j <= V; j++)  

		{

		   for (int i = 0; i < n; i++)

		   {

			if (j >= v[i])

			{

				d[j] = max(d[j], d[j - v[i]] + value[i]);



			}



		   }

		}

	printf("%d ", d[V]);

}

  

你可能感兴趣的:(问题)