Login
网站首页 > 文章中心 > 其它

c语言背包问题 贪心算法_c++语言程序设计背包问题

作者:小编 更新时间:2023-07-08 10:20:21 浏览量:61人看过

下面土嘎嘎小编分享一个C++语言的贪心算法解决背包问题的示例程序:

〓〓cpp代码如下:〓〓

#include <iostream>

#include <vector>

#include <algorithm>

struct Item {

    int weight;

    int value;

};

bool compare(Item a, Item b) {

    double ratio_a = (double)a.value / a.weight;

    double ratio_b = (double)b.value / b.weight;

    return ratio_a > ratio_b;

}

double fractionalKnapsack(int capacity, std::vector<Item>& items) {

    std::sort(items.begin(), items.end(), compare);

    double totalValue = 0.0;

    for (const auto& item : items) {

        if (capacity <= 0)

            break;

        if (item.weight <= capacity) {

            totalValue += item.value;

            capacity -= item.weight;

        } else {

            double fraction = (double)capacity / item.weight;

            totalValue += item.value * fraction;

            capacity = 0;

        }

    }

    return totalValue;

}

int main() {

    int capacity = 50;

    std::vector<Item> items = {{10, 60}, {20, 100}, {30, 120}};

    double maxValue = fractionalKnapsack(capacity, items);

    std::cout << "Maximum value that can be obtained: " << maxValue << std::endl;

    return 0;

}

上面给出的代码中,我们定义了一个 Item 结构体来表示每个物品的重量和价值。 compare 函数用于比较两个物品的价值与重量比例,以便进行贪心选择。 fractionalKnapsack 函数实现了贪心算法的逻辑,首先对物品进行排序,然后从价值与重量比例最高的物品开始选择,直到背包容量用尽或所有物品都被选中。最后,在 main 函数中定义了一个背包容量和一组物品,并调用 fractionalKnapsack 函数来计算可获得的最大价值。

土嘎嘎技术网友情提示:贪心算法在解决背包问题时并不是一种通用的解决方法,只适用于某些特定情况下。对于一般的背包问题,需要使用动态规划等更复杂的算法来求解。


版权声明:倡导尊重与保护知识产权,本站有部分资源、图片来源于网络,如有侵权,请联系我们修改或者删除处理。
转载请说明来源于"土嘎嘎" 本文地址:http://www.tugaga.com/jishu/other/1066.html
<<上一篇 2023-07-08
下一篇 >> 2023-07-08

编辑推荐

热门文章