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

头歌实训作业 算法设计与分析-动态规划(第1关:0/1背包问题)

任务描述


求解0/1背包问题。

问题描述


   有n个重量分别为{w 1,w 2,…,w n }的物品,它们的价值分别为{v 1,v 2 ,…,v n},给定一个容量为 W 的背包。
  设计从这些物品中选取一部分物品放入该背包的方案,每个物品要么选中要么不选中,要求选中的物品不仅能够放到背包中,而且重量和为 W ,并具有最大的价值。

测试说明


测试输入:
第一行为2个整数,分别表示物品数量 n(1≤n≤20) 和背包容量 W(1≤W≤10000) 。
接下来有2行,第一行表示n件物品的重量 w i(1≤w i ≤500),第二行表示n件物品的价值 v i 。

3 30
16 15 15
45 25 25

预期输出(最大价值):
50

输出解释:
最大价值装入方案选第2件、第3件物品,重量=15+15=30,不超过载重限制,价值=25+25=50。

注意算法的时间复杂度优化,避免在物品数量较多时出现评测超时。

补充代码: 

 #include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

// 定义背包问题函数
int knapsack(int n, int W, vector<int>& weights, vector<int>& values) {
    // 初始化DP数组
    vector<vector<int>> dp(n + 1, vector<int>(W + 1, 0));

    // 填充DP数组
    for (int i = 1; i <= n; ++i) {
        for (int j = 1; j <= W; ++j) {
            if (weights[i - 1] <= j) {
                dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weights[i - 1]] + values[i - 1]);
            } else {
                dp[i][j] = dp[i - 1][j];
            }
        }
    }
    return dp[n][W];
}

int main() {
    int n, W;
    // 输入物品数量和背包容量
    cin >> n >> W;

    vector<int> weights(n);
    vector<int> values(n);

    // 输入物品的重量
    for (int i = 0; i < n; ++i) {
        cin >> weights[i];
    }

    // 输入物品的价值
    for (int i = 0; i < n; ++i) {
        cin >> values[i];
    }

    // 计算最大价值
    int max_value = knapsack(n, W, weights, values);
    cout << max_value << endl;

    return 0;
}

 


http://www.kler.cn/a/518940.html

相关文章:

  • 基于回归分析法的光伏发电系统最大功率计算simulink建模与仿真
  • 系统思考—问题分析
  • 【QT】 控件 -- 显示类
  • MySQL数据库笔记——版本号机制和CAS(Compare And Swap)
  • 【第六天】零基础入门刷题Python-算法篇-数据结构与算法的介绍-一种常见的贪心算法(持续更新)
  • 完全二叉树的节点个数(力扣222)
  • 【Python】第四弹---深入理解Python控制流:从顺序到循环的全面解析
  • 论文速读|Beit: Bert pre training of image transformers.ICLR22
  • BGP分解实验·12——配置路由反射器
  • ML基础2-python中的可视化1:matplotlib
  • 汽车定速巡航
  • 2025数学建模美赛|E题成品论文
  • Mono里运行C#脚本35—加载C#语言基类的过程
  • 高阶C语言|数组名的深度解析(数组名结合sizeof与strlen的详解)
  • impact 影响分析学习笔记(一)
  • 【后端面试总结】mysql的join,left join,right join,full join分别是什么意思
  • maven 全局配置
  • 【Python使用】嘿马python高级进阶全体系教程第11篇:静态Web服务器-面向对象开发,1. 以面向对象的方式开发静态W
  • 79,【3】BUUCTF WEB [GXYCTF2019]BabysqliV3.0
  • mongoDB常见指令
  • Go中new和make的区别对比
  • 机器学习的通俗解释
  • Node.js下载安装及环境配置教程 (详细版)
  • 服务器中的流量主要是指什么?
  • RPC是什么?和HTTP区别?
  • Python 对列表进行排序的 5 种方法