首页 > 代码库 > 01背包模板

01背包模板

转载请注明出处:http://blog.csdn.net/u012860063

模版就直接贴代码:

01背包问题
01背包问题的特点是,每种物品仅有一件,可以选择放或不放。
01背包问题描述:
有N件物品和一个容量为V的背包。第i件物品的重量是c[i],价值是w[i]。
求解将哪些物品装入背包可使这些物品的重量总和不超过背包容量,且价值总和最大。
#include <stdio.h>
int max(int x,int y)
{
	int M;
	M=x>y ? x : y;
	return M;
}
int w[1050005],d[1050005],f[1050005];
int main()
{
	int i, j, n, m;
	while(scanf("%d",&n)!=EOF)
	{
		scanf("%d", &m);
		for(i=0; i<n; i++)
			scanf("%d%d", &w[i],&d[i]);//w[i]为重量,d[i]为价值
		for(i=0; i<n; i++)
		{
			for(j=m; j>=w[i]; j--)
				f[j] = max(f[j], f[j-w[i]]+d[i]);
		}
		printf("%d\n",f[m]);
	}
	return 0;
}
此程序为poj3624