变量设定:n(表示物品数量),maxweight (背包的最大容量), wei[max] (存放每个物品的重量) val[max](存放每个物品的价值)
f的初始化状态取决题目要求是恰好装满背包,还是不装满也可,下面内容针对不装满也可的情况。
应用二维数组解:动态方程f[i][j](i表示第i件物品,j表示此时背包的容量)
f[i][j]的初始化状态为,f[i][0]=0,f[0][j]=0
for(i=1;i<=m;i++)
{
for(j=1;j<=maxweight;j++)
{
f[i][j]=max(f[i][j-wei[i]]+val[i],f[i-1][j]) (wei[i]<=j)
f[i][j]=f[i-1][j] (wei[i]>j)
}
}
应用一维数组解:f[i]表示背包容量为i
f[i]的初始状态为 f[i]=0
for(i=1;i<=n;i++)
{
for(j=m;j>=wei[i];j--)
{
f[j]=f[j-wei[i]]+val[i]>f[j]?f[j-wei[i]]+val[i]:f[j];
}
}
详细内容参考http://www.cnblogs.com/forwardpower/archive/2010/05/30/1747432.html