下面土嘎嘎小编分享一个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 函数来计算可获得的最大价值。
土嘎嘎技术网友情提示:贪心算法在解决背包问题时并不是一种通用的解决方法,只适用于某些特定情况下。对于一般的背包问题,需要使用动态规划等更复杂的算法来求解。