标签: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标签:01背包
原文地址:http://blog.csdn.net/u012860063/article/details/32911251