0-1背包问题和部分背包(fractional knapsack)问题分析 - 点缀星辰 - ITeye技术网站
http://www.cnblogs.com/laifeiyao/p/3491119.html
http://www.cnblogs.com/laifeiyao/p/3491119.html
[问题]给定n种物品和1个背包,背包允许的最大重量为Capacity。物品i的重量为weight[i],价值为value[i]。与0-1背包问题(每种物品只有装入背包或不装入背包两种选择)不同的是,在选择物品i装入背包时,可以只装入物品i的一部分。 问应当怎样选择物品装入背包,使背包中的物品的总价值最大?
- public double selectMax() {
- double maxValue = 0.0;
- int sum = 0;
- int i; // suppose v is already sorted by v[i]/w[i]
- for(i = 0; i < v.length; i++) {
- if(sum + w[i] < weight) {
- sum += w[i];
- maxValue += v[i];
- } else
- break;
- }
- if(i < v.length && sum < weight) {
- maxValue += (double)(weight - sum) / w[i] * v[i];
- }
- return maxValue;
- }