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函数来求解最大总价值,并输出结果。

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

相关推荐

  1. 贪心算法c++

    2024-07-13 23:30:02       48 阅读
  2. C++】贪心算法

    2024-07-13 23:30:02       42 阅读
  3. 贪心算法C++

    2024-07-13 23:30:02       35 阅读
  4. C++贪心算法

    2024-07-13 23:30:02       31 阅读
  5. c++贪心算法

    2024-07-13 23:30:02       19 阅读
  6. C++的算法贪心算法

    2024-07-13 23:30:02       23 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-13 23:30:02       66 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-13 23:30:02       70 阅读
  3. 在Django里面运行非项目文件

    2024-07-13 23:30:02       57 阅读
  4. Python语言-面向对象

    2024-07-13 23:30:02       68 阅读

热门阅读

  1. ArcGIS Pro SDK (八)地理数据库 4 查询

    2024-07-13 23:30:02       16 阅读
  2. 文本语言的上升沿写法

    2024-07-13 23:30:02       16 阅读
  3. Aop实现后端数据重复提交

    2024-07-13 23:30:02       23 阅读
  4. Android C++系列:Linux进程间关系

    2024-07-13 23:30:02       21 阅读
  5. thinkphp5多层with关联查询错误问题

    2024-07-13 23:30:02       26 阅读
  6. Understanding EtherCAT Device Serial Number Checking

    2024-07-13 23:30:02       20 阅读
  7. 1.1 Android启动概览

    2024-07-13 23:30:02       22 阅读
  8. HttpUtils工具类

    2024-07-13 23:30:02       19 阅读
  9. 风景区服务热线系统:智能化时代的旅游新选择

    2024-07-13 23:30:02       21 阅读
  10. acnconda虚拟环境管理笔记

    2024-07-13 23:30:02       21 阅读
  11. Spring基础知识

    2024-07-13 23:30:02       18 阅读
  12. 计算机课程名,汇总

    2024-07-13 23:30:02       16 阅读