请给我一段C++代码来展示贪心算法的应用
时间: 2024-04-11 22:33:23 浏览: 89
c++编程的贪心算法代码
4星 · 用户满意度95%
当然,以下是一个简单的用C++展示贪心算法应用的代码示例:
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
struct Item {
int value;
int weight;
Item(int v, int w) : value(v), weight(w) {}
};
bool cmp(Item a, Item b) {
double ratioA = (double)a.value / a.weight;
double ratioB = (double)b.value / b.weight;
return ratioA > ratioB;
}
double knapsackGreedy(int capacity, std::vector<Item>& items) {
// 将物品按照价值重量比进行排序
std::sort(items.begin(), items.end(), cmp);
double totalValue = 0.0;
int currentWeight = 0;
for (const auto& item : items) {
if (currentWeight + item.weight <= capacity) {
totalValue += item.value;
currentWeight += item.weight;
}
else {
int remainingCapacity = capacity - currentWeight;
totalValue += item.value * ((double)remainingCapacity / item.weight);
break; // 背包已装满,退出循环
}
}
return totalValue;
}
int main() {
int capacity = 10;
std::vector<Item> items;
items.emplace_back(60, 5); // 物品1,价值60,重量5
items.emplace_back(100, 20); // 物品2,价值100,重量20
items.emplace_back(120, 30); // 物品3,价值120,重量30
double maxValue = knapsackGreedy(capacity, items);
std::cout << "背包中物品的最大总价值为:" << maxValue << std::endl;
return 0;
}
```
这段代码实现了一个简单的背包问题,使用贪心算法来求解。在`main`函数中,我们定义了背包的容量和一些物品,每个物品有一个价值和重量。然后,调用`knapsackGreedy`函数来计算背包中物品的最大总价值。
`knapsackGreedy`函数首先将物品按照价值重量比进行排序,然后从高到低依次选择物品放入背包。如果当前物品的重量可以完全放入背包,就将其价值加到总价值中,并更新当前背包重量;如果当前物品的重量超过了背包剩余容量,就计算能够装入背包的部分,并结束循环。
这只是一个简单的贪心算法示例,实际应用中可能会有更复杂的问题和算法。你可以根据自己的需求进行修改和扩展。
阅读全文