欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 游戏 > c++贪心算法

c++贪心算法

2024/10/24 7:23:54 来源:https://blog.csdn.net/m0_74811974/article/details/140149880  浏览:    关键词:c++贪心算法

C++贪心算法是一种通过每次选择当前最优解的局部最优策略来求解问题的方法。下面是一个用C++实现贪心算法的示例:

#include <iostream>
#include <vector>
#include <algorithm>using namespace std;// 贪心算法求解背包问题
int knapsack(vector<int>& weights, vector<int>& values, int capacity) {int n = weights.size();vector<pair<double, int>> valuePerWeight(n); // 存储每个物品的单位价值(价值/重量)// 计算每个物品的单位价值for (int i = 0; i < n; i++) {valuePerWeight[i].first = values[i] / (double)weights[i];valuePerWeight[i].second = i;}// 按单位价值降序排序sort(valuePerWeight.begin(), valuePerWeight.end(), greater<pair<double, int>>());int totalValue = 0; // 总价值int currentWeight = 0; // 当前背包容量// 选择单位价值最高的物品,直到背包装满或没有物品可选for (int i = 0; i < n && currentWeight < capacity; i++) {int index = valuePerWeight[i].second;if (weights[index] + currentWeight <= capacity) {totalValue += values[index];currentWeight += weights[index];} else {int remainingCapacity = capacity - currentWeight;totalValue += valuePerWeight[i].first * remainingCapacity;currentWeight = capacity;}}return totalValue;
}int main() {vector<int> weights = {2, 3, 4, 5};vector<int> values = {3, 4, 5, 6};int capacity = 8;int maxValue = knapsack(weights, values, capacity);cout << "最大价值: " << maxValue << endl;return 0;
}

以上示例是一个贪心算法用于求解背包问题的实现。其中,knapsack函数接受物品的重量和价值数组,以及背包的容量,返回能够放入背包的物品的最大总价值。主函数中定义了一个背包容量为8的背包,并定义了4个物品的重量和价值数组,然后调用knapsack函数来求解最大总价值,并输出结果。

贪心算法的核心思想在于每次选择当前最优解,然后再基于已选择的最优解继续选择下一个最优解,以此类推,直到无法选择下一个最优解或达到问题的要求。在背包问题中,每次选择单位价值最高的物品放入背包,并计算总价值。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com