HLOJ 1006 0-1背包问题
HDU 2602 Bone Collector 类似,但要注意输入顺序和问题规模,最重要的是重量为0的骨头居然也有价值的!
#include<iostream>
using namespace std;
const int N=401; //#define N 401
const int M=1501; //#define M 1501
int f[N][M]; //下标从1开始用
//n种物品,各种物品的容量、价值分别在w、v数组中;c为背包容量
//状态:f[i][j],使用前i种物品构成背包容量为j时能获得的最大价值
//转移方程:f[i][j]=max(f[i-1][j], f[i-1][j-w[i]]+v[i]),
//转移方程中,前者表示不用第i种物品,后者表示用第i种物品
//初值:0种物品时任何容量下能获得的最大价值都为0
//结果:f[n][c]
int max(int a, int b)
{
if(a>b)
return a;
else
return b;
}
int dpKnapSack(int n, int w[], int v[], int c)
{
int i,j;
for (j=0; j<=c; j++) f[0