首页 > 编程语言 >多维背包问题动态规划算法

多维背包问题动态规划算法

时间:2024-03-22 15:31:50浏览次数:26  
标签:index currentValue 背包 10 int items 算法 currentItems 多维

#include <iostream>  

#include <vector>  

using namespace std;

// 定义物品结构体  

struct Item {

    int id;

    int weight;

    int volume;

    int value;

};

// 初始化背包的容量限制  

const int MAX_WEIGHT = 50;

const int MAX_VOLUME = 50;

// 全局变量,用于记录最大价值和选择的物品  

int maxValue = 0;

vector<Item> selectedItems;

vector<Item> items = {

     {1, 10, 20, 60},

     {2, 20, 10, 100},

     {3, 30, 30, 120},

     {4, 25, 15, 70},

     {5, 5, 5, 10}

};

// 回溯函数  

void backtrack(int index, int currentWeight, int currentVolume, int currentValue, vector<Item>& currentItems) {

    // 如果已经考虑了所有物品,则更新最大价值  

    if (index == items.size()) {

        if (currentValue > maxValue) {

            maxValue = currentValue;

            selectedItems = currentItems;

        }

        return;

    }

    // 不选择当前物品  

    backtrack(index + 1, currentWeight, currentVolume, currentValue, currentItems);

    // 如果当前物品可以被选择(不超过背包容量)  

    if (currentWeight + items[index].weight <= MAX_WEIGHT &&

        currentVolume + items[index].volume <= MAX_VOLUME) {

        // 选择当前物品  

        currentItems.push_back(items[index]);

        backtrack(index + 1, currentWeight + items[index].weight, currentVolume + items[index].volume,

            currentValue + items[index].value, currentItems);

        // 回溯,撤销选择  

        currentItems.pop_back();

    }

}

int main() {

    // 初始化物品列表  

    vector<Item> items = {

        {1, 10, 20, 60},

        {2, 20, 10, 100},

        {3, 30, 30, 120},

        {4, 25, 15, 70},

        {5, 5, 5, 10}

    };

    // 调用回溯函数  

    vector<Item> currentItems;

    backtrack(0, 0, 0, 0, currentItems);

    // 输出最大价值和选择的物品  

    cout << "Maximum value: " << maxValue << endl;

    cout << "Selected items:" << endl;

    for (const auto& item : selectedItems) {

        cout << "Item ID: " << item.id << ", Weight: " << item.weight << ", Volume: " << item.volume << ", Value: " << item.value << endl;

    }

    return 0;

}

标签:index,currentValue,背包,10,int,items,算法,currentItems,多维
From: https://blog.csdn.net/m0_63846601/article/details/136942595

相关文章

  • 【刷题笔记】回溯算法 - ⭐去重问题
    代码随想录讲解:代码随想录(programmercarl.com)只是在刷题过程中记录一下自己的想法,因为总是记不住去重逻辑。回溯算法:回溯法,一般可以解决如下几种问题:组合问题:N个数里面按一定规则找出k个数的集合切割问题:一个字符串按一定规则有几种切割方式子集问题:一个N个数的集合里有......
  • 机器学习-05-回归算法
    总结本系列是机器学习课程的系列课程,主要介绍机器学习中回归算法,包括线性回归,岭回归,逻辑回归等部分。参考fit_transform,fit,transform区别和作用详解!!!!!!机器学习入门(七):多项式回归,PolynomialFeatures详解“L1和L2正则化”直观理解解读正则化LASSO回归岭回归python学......
  • 中电金信:技术浅谈 | 动态规划算法的原理和实现
    ​导语:动态规划(Dynamicprogramming)是一种在数学、计算机科学和经济学中使用的方法。动态规划算法与分治法类似,通过将带求解的问题分解为若干个相对简单的子问题(阶段)的方式,来求解复杂问题。本文作者用相对精炼的篇幅内容对动态规划算法进行背景及原理介绍,并举例说明如何进行问题......
  • 代码随想录算法训练营第五十四天 | 115.不同的子序列,392.判断子序列
    392.判断子序列 已解答简单 相关标签相关企业 给定字符串 s 和 t ,判断 s 是否为 t 的子序列。字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不......
  • 算法练习Day04
    有hr说什么现在软件谁还用c++,都是rust了虽然但是他也太以偏概全了,,((烧饼吧1.两两交换链表中的节点思路:将链表中相邻的节点两两交换,则交换的步骤是eg:[0]->[1]->[2]->[3]->[4]交换1和2,3和4;则交换的步骤是,先让0指向2,再让2指向1,最后让1指向3,即完成了一次交换;此时需要......
  • 最新abogus算法还原之传参加密
    本文只是我简要的分析过程,以及一些重要点的记录,不涉及核心算法  一、网站aHR0cHM6Ly9idXlpbi5qaW5yaXRlbWFpLmNvbS9kYXNoYm9hcmQvbWVyY2gtcGlja2luZy1saWJyYXJ5base64解密即可,需要登录二、定位参数直接从启动器追踪或者根据url参数定位最后定位到bdms.js文件......
  • 数据结构与算法设计
    前言最近在复习数据结构,两年前曾经阅读过大量相关书籍,包括各种算法入门书和一些游戏逻辑代码。当时自认为花了大量时间理解排序算法的逻辑,但是要自己复述仍然存在困难,做题数目也偏少,说明并没有纳入自己的知识体系。但存在一个问题是,没有自己动手写大量的程序,只是短时间(半个月)内......
  • 算法文章中涉及的若干基础类的主要API
    本文记述了笔者所写算法文章中涉及的若干基础类的主要API(部分参考算法:第4版/(美)塞奇威客(Sedgewick,R.),(美)韦恩(Wayne,K.)著;谢路云译.--北京:人民邮电出版社,2012.10(2021.5重印)实现,包括顺序存储结构、基础类的包装类、随机数、标准输入输出等。◆......
  • 代码随想录算法训练营第十七天| 110. 平衡二叉树 257. 二叉树的所有路径 404. 左叶
    110.平衡二叉树https://leetcode.cn/problems/balanced-binary-tree/description/publicbooleanisBalanced(TreeNoderoot){intbalance=balance(root);returnbalance==-1?false:true;}publicintbalance(TreeNodenode){i......
  • 新能源汽车充电桩站点烟火AI识别检测算法应用方案
    新能源汽车作为现代科技与环保理念的完美结合,其普及和应用本应带给人们更加便捷和绿色的出行体验。然而,近年来新能源汽车充电火灾事故的频发,无疑给这一领域投下了巨大的阴影。这不禁让人深思,为何这一先进的交通工具在充电过程中会引发火灾事故。从技术层面来看,新能源汽车的充电系......