码迷,mamicode.com
首页 > 其他好文 > 详细

分数背包(贪心策略)

时间:2018-03-18 10:25:53      阅读:115      评论:0      收藏:0      [点我收藏+]

标签:names   单位   for   rac   div   post   一个   public   highlight   

  问题描述:体积分别为10cm3, 50cm3, 80cm3的盒子中装有价值分别为60k, 200k, 240k的珠宝,其中盒子的单位体积为10cm3,也就是说体积为50cm3的盒子中装有5个10cm3的小盒子,80cm3的盒子中装有8个10cm3的小盒子。还有一个最多能装100cm3的箱子,请问如何装载装有珠宝的盒子可使得箱子中的珠宝价值最大?

  利用贪心,则很简单:

#include <iostream>
#include <vector>

using namespace std;

class greedyAlgorithm {
public:
    int fractionalKnapsack(vector<int> v, vector<int> w, int size)
    {
        int value = 0;
        int amount = 0;
        for (int i = 0; i < v.size(); i++)
        {
            if (amount > size)
                break;
            if (size - amount <= w[i])
                value += v[i] * (size - amount) / w[i];
            else
                value += v[i];
            amount += w[i];

        }
        return value;
    }
};

int main()
{
    vector<int> v{60, 200, 240};
    vector<int> w{10, 50, 80};

    greedyAlgorithm solve;
    cout << solve.fractionalKnapsack(v, w, 100);
    return 0;
}

  运行结果:

380

  

分数背包(贪心策略)

标签:names   单位   for   rac   div   post   一个   public   highlight   

原文地址:https://www.cnblogs.com/darkchii/p/8594139.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!