01背包问题
2012-12-16 14:15
246 查看
变量设定: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];
}
}
详细内容参考/article/5568038.html
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];
}
}
详细内容参考/article/5568038.html
相关文章推荐
- 背包问题(01背包、完全背包、部分背包)
- 01背包问题 java实现
- 01背包问题小结
- 01背包问题浅析
- 经典问题之01背包
- 01背包问题
- 基础01背包问题
- POJ 3624 Charm Bracelet【裸01背包和关于贪心解 01 背包问题的思考】
- 背包问题——nyoj860 又见01背包
- 51nod1085---背包问题(51nod基础:01背包)
- 01背包问题的一维数组解法
- 最大报销额(动态规划:01背包问题变形)
- 动态规划之背包问题01--java实现
- 01背包与完全背包问题
- No.1:01背包问题
- 01背包问题的一般DP求解
- 01背包问题
- 01背包问题(动态规划法)
- 背包问题(01背包,完全背包,多重背包)
- 01背包问题