转载请注明出处: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
时间: 2024-12-25 07:59:44