当前位置: 首页 > news >正文

[leetcode]01背包问题

一.问题描述

01背包问题是一个经典的组合优化问题,属于动态规划算法的典型应用场景。其问题描述如下: 有一个容量为C的背包,以及 n 个物品,每个物品都有重量w[i] 和价值 v[i]。要求在有限的背包容量下选择一些物品放入背包,使得放入背包的物品总价值最大,且放入物品的总重量不能超过背包的容量。同时,对于每个物品,只能选择放入背包或者不放入背包,即每个物品只有两种状态,这也是“01”背包名称的由来。

例如,有一个容量为5的背包,有3个物品,分别是重量为2、价值为3的物品1,重量为3、价值为4的物品2,以及重量为1、价值为2的物品3。如何选择物品放入背包,才能使背包内物品的总价值最大呢?这就是01背包问题需要解决的。

Coding:

#include <bits/stdc++.h>
using namespace std;

int main()
{
    int n, bagweight;// bagweight代表行李箱空间

    cin >> n >> bagweight;

    vector<int> weight(n, 0); // 存储每件物品所占空间
    vector<int> value(n, 0);  // 存储每件物品价值

    for (int i = 0; i < n; ++i) {
        cin >> weight[i];
    }
    for (int j = 0; j < n; ++j) {
        cin >> value[j];
    }
    // dp数组, dp[i][j]代表行李箱空间为j的情况下,从下标为[0, i]的物品里面任意取,能达到的最大价值
    vector<vector<int>> dp(weight.size(), vector<int>(bagweight + 1, 0));

    // 初始化, 因为需要用到dp[i - 1]的值
    // j < weight[0]已在上方被初始化为0
    // j >= weight[0]的值就初始化为value[0]
    for (int j = weight[0]; j <= bagweight; j++) {
        dp[0][j] = value[0];
    }

    for (int i = 1; i < weight.size(); i++) { // 遍历科研物品
        for (int j = 0; j <= bagweight; j++) { // 遍历行李箱容量
            if (j < weight[i]) dp[i][j] = dp[i - 1][j]; // 如果装不下这个物品,那么就继承dp[i - 1][j]的值
            else {
                dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i]);
            }
        }
    }
    cout << dp[n - 1][bagweight] << endl;

    return 0;
}


http://www.mrgr.cn/news/97917.html

相关文章:

  • opencv人脸性别年龄检测
  • SD + Contronet,扩散模型V1.5+约束条件后续优化:保存Canny边缘图,便于视觉理解——stable diffusion项目学习笔记
  • MCU的USB接口作为 USB CDC串口输出
  • matlibplot的交互式demo
  • RocketMQ和kafka 的区别
  • 【图书管理系统】深入解析基于 MyBatis 数据持久化操作:全栈开发图书管理系统:查询图书属性接口(注解实现)、修改图书属性接口(XML 实现)
  • 用最简单的方式讲述离散傅里叶级数(DFS)以及离散傅立叶变换(DFT)
  • 微服务多模块构建feign项目过程与一些报错(2025详细版)
  • 蓝桥杯 C/C++ 组历届真题合集速刷(一)
  • SmolVLM2: The Smollest Video Model Ever(三)
  • 【数据结构 · 初阶】- 单链表
  • mysql-锁的算法(记录锁、间隙锁、临键锁)
  • LeetCode算法题(Go语言实现)_38
  • Spring事务系列 三
  • 44、Spring Boot 详细讲义(一)
  • wsl2+ubuntu22.04安装blender教程(详细教程)
  • 解决 vite.config.ts 引入scss 预处理报错
  • Adaptive AUTOSAR 状态管理和转换——ActionItemList
  • 【C++游戏引擎开发】第13篇:光照模型与Phong基础实现
  • 1200 模拟量输入输出功能