问题: 有N种物品和一个容量为V的背包。第i种物品最多有n[i]件可用,每件费用是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。基本算法: 这题目和全然背包问题非常类似。主要的方程仅仅需将全然背包问题的方程稍微一改就可以,由于对于第i种物品有n...
分类:
其他好文 时间:
2014-06-25 22:02:02
阅读次数:
234
当所给问题是从n个元素的集合S中找出满足某种性质的子集时,解空间为子集树。例如:0-1背包问题当所给问题是从n个元素的集合S中找出满足某种性质的排列时,解空间为排列树。例如:旅行售货员问题回溯法搜索子集树算法描述为:void backtrack(int t){ if(t>n) output...
分类:
其他好文 时间:
2014-06-24 21:47:06
阅读次数:
221
题目:
有n件物品和一个容量为C的背包。(每种物品均只有一件)第i件物品的体积是v[i],重量是w[i]。选一些物品装到这个背包中,使得背包内物品在总体积不超过C的前提下重量尽量大。
解法:两种思路:
第一种:d(i, j)表示“把第i,i+1,i+2,...n个物品装到容量为j的背包中的接下来的最大总重量”。
d(i, j) = max{d(i+1, j), ...
分类:
其他好文 时间:
2014-06-22 19:49:37
阅读次数:
137
因为苹果可能在不同的子树中,所以,很容易想到设状态dp_back[i][j]为以i点为树根走j步并回到i点的最大苹果数与dp_to[i][j]不回到i点的两个状态。于是,转移方程就很明显了。只是注意要减去一来一回,或者不回的边。树形DP里套背包。但这题远比这复杂,个人认为。因为在实现上细节太多。实现...
分类:
其他好文 时间:
2014-06-22 13:14:18
阅读次数:
201