头歌资源库(13)背包问题

一、 问题描述

 二、算法思想 

这是一个背包问题,可以使用动态规划算法来解决。具体思路如下:

  1. 定义一个二维数组dp,dp[i][j]表示前i个物品在背包容量为j时能获取的最大价值。
  2. 初始化dp数组的第一行和第一列为0,表示当只有一个物品或背包容量为0时,最大价值为0。
  3. 遍历每个物品i和每个背包容量j,根据以下状态转移方程更新dp数组:
    • 如果物品i的重量大于背包容量j,则无法放入背包,dp[i][j] = dp[i-1][j]。
    • 如果物品i的重量小于等于背包容量j,则考虑放入或不放入物品i的情况:
      • 放入物品i,dp[i][j] = dp[i-1][j-weight[i]] + value[i],其中weight[i]表示物品i的重量,value[i]表示物品i的价值。
      • 不放入物品i,dp[i][j] = dp[i-1][j]。
    • 选择较大的值作为dp[i][j]。
  4. 从dp数组的最后一个元素往前遍历,根据状态转移方程可以得到装入背包的物品编号。
  5. 输出装入背包的物品编号。

三、代码实现 

#include <stdio.h>#define MAX_ITEMS 100
#define MAX_WEIGHT 1000int max(int a, int b) {return (a > b) ? a : b;
}// 动态规划求解背包问题
void knapsack(int n, int capacity, int weights[], int values[]) {int dp[MAX_ITEMS + 1][MAX_WEIGHT + 1] = {0};int i, w;// 填表格for (i = 1; i <= n; i++) {for (w = 1; w <= capacity; w++) {if (weights[i - 1] > w) {dp[i][w] = dp[i - 1][w];} else {dp[i][w] = max(dp[i - 1][w], values[i - 1] + dp[i - 1][w - weights[i - 1]]);}}}// 回溯找出装入背包的物品int res[MAX_ITEMS];int k = n, c = capacity;int num = 0;while (k > 0 && c > 0) {if (dp[k][c] != dp[k - 1][c]) {res[num++] = k;c -= weights[k - 1];}k--;}// 输出结果for (i = num - 1; i >= 0; i--) {printf("%-d ", res[i]);}printf("\n");printf("end");
}int main() {int n, capacity;scanf("%d %d", &n, &capacity);int weights[MAX_ITEMS], values[MAX_ITEMS];for (int i = 0; i < n; i++) {scanf("%d", &weights[i]);}for (int i = 0; i < n; i++) {scanf("%d", &values[i]);}// 调用背包问题求解函数knapsack(n, capacity, weights, values);return 0;
}

执行结果 

  结语  

如果你喜欢一匹马

不必去追,去种草

来年会有一群马向你奔来

!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/30106.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【吊打面试官系列-Mysql面试题】SQL 语言包括哪几部分?每部分都有哪些操作关键字?

大家好&#xff0c;我是锋哥。今天分享关于 【SQL 语言包括哪几部分&#xff1f;每部分都有哪些操作关键字&#xff1f;】面试题&#xff0c;希望对大家有帮助&#xff1b; SQL 语言包括哪几部分&#xff1f;每部分都有哪些操作关键字&#xff1f; SQL 语言包括数据定义(DDL)、…

大屏适配方案汇总

1. 适配方案1&#xff1a;rem font-size 我们都知道&#xff0c;在 css 中 1rem 等于 html 根元素设定的 font-size 的 px 值&#xff0c;通过动态的修改html 根元素的 font-size 大小就能动态的改变 rem 的大小&#xff0c;从而实现适配。 原理 动态设置 HTML 根字体大小将…

制作一个苹果软件自动运行工具需要用到的源代码!

在数字化时代的浪潮中&#xff0c;自动化运行工具扮演着越来越重要的角色&#xff0c;这些工具可以极大地提高工作效率&#xff0c;减少人为操作的繁琐和错误。 在苹果软件生态系统中&#xff0c;制作一个自动运行工具同样具有广泛的应用前景&#xff0c;本文将围绕“制作一个…

模拟原神圣遗物系统-小森设计项目,需求分析

需求分析 我操控某个角色的圣遗物时发现&#xff0c;一开始玩啥也不懂慢慢了解&#xff0c;今天才想起要不做一个 &#xff0c;然后开始想需求 跟Ai聊技术 聊着聊着 发现圣遗物 这个东西有点意思 本来今天打算写一下数据库 的外键想起了一些高兴的事情&#xff08;美人鱼&#…

C# WinForm —— 36 布局控件 GroupBox 和 Panel

1. 简介 两个可以盛放其他控件的容器&#xff0c;可以用于把不同的控件分组&#xff0c;一般不会注册事件 GroupBox&#xff1a;为其他控件提供可识别的分组。可通过Text属性设置标题&#xff1b;有边框&#xff1b;没有滚动条&#xff0c;一般用于按功能分组 Panel&#xff…

SpringBoot+Maven项目的配置构建

文章目录 1、application.properties2、pom.xml 1、application.properties 也可使用yml yaml #静态资源 spring.mvc.static-path-pattern/images/** #上传文件大小设置 spring.http.multipart.max-file-size10MB spring.http.multipart.max-request-size10MBspring.mvc.path…

Sui的Fastcrypto加密库刷新速度记录

Sui使用的加密库Fastcrypto打破了许多速度记录&#xff0c;Mysten Labs在基准测试和安全分析中的工作修复了许多安全漏洞&#xff0c;同时通过识别新的优化技巧为创新开辟了道路。 最近在伦敦帝国理工学院举行的国际性能工程会议&#xff08;ICPE&#xff09;基准测试研讨会上…

【LeetCode:394. 字符串解码 + 栈 | 递归】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

智慧路灯:照亮未来城市的智慧之光

智慧路灯&#xff0c;顾名思义&#xff0c;是在传统路灯基础上集成物联网、大数据、云计算、人工智能等现代信息技术的新型照明系统。它不仅提供节能高效的照明服务&#xff0c;更成为城市信息采集、传输、发布的载体&#xff0c;以及多种增值服务的平台。 核心功能与技术创新 …

聊聊 Mybatis 动态 SQL

这篇文章&#xff0c;我们聊聊 Mybatis 动态 SQL &#xff0c;以及我对于编程技巧的几点思考 &#xff0c;希望对大家有所启发。 1 什么是 Mybatis 动态SQL 如果你使用过 JDBC 或其它类似的框架&#xff0c;你应该能理解根据不同条件拼接 SQL 语句有多痛苦&#xff0c;例如拼…

如何设置文件夹密码?文件夹加密如何操作!分享4款安全加密软件!

在数字化时代&#xff0c;数据安全显得尤为重要。设置文件夹密码和加密操作是保护个人或企业数据不被非法访问的有效手段。本文将为您详细介绍如何设置文件夹密码和加密操作&#xff0c;并分享四款安全加密软件&#xff0c;助您轻松提升数据安全防护能力。 一、如何设置文件夹/…

工作人员能从轧钢测径仪上获取哪些有效信息?

轧钢测径仪安装在轧钢生产线中&#xff0c;无论是热轧还是冷轧&#xff0c;都不能阻挡测径仪的高速无损高精检测。它采用八轴测量系统&#xff0c;能全方位检测外径尺寸&#xff0c;并且配备了测控软件系统&#xff0c;为工作人员提供更加丰富的产线信息。 普通轧钢测径仪能获…

Playwright 入门教程

1. 环境说明 操作系统&#xff1a;macOS 11.7Python&#xff1a;3.10.6 2. 安装 2.1. 创建测试环境 mkdir playwright-demo cd playwright-demo/ python3 -m venv venv # 安装 Pytest 插件 venv/bin/pip3 install pytest-playwright # 安装需要的浏览器 venv/bin/playwrigh…

DLP数据防泄密系统有什么功能?四款特别好用的DLP仿泄密系统

DLP&#xff08;Data Loss Prevention&#xff0c;数据丢失防护&#xff09;系统是一类专门用于保护组织内部数据不被非法访问、泄露或误用的安全解决方案。 这类系统通常具备以下关键功能&#xff1a; 1.数据识别与分类&#xff1a;自动发现并分类存储在网络、终端和云环境中…

24计算机应届生的活路是什么

不够大胆❗ 很多小伙伴在找工作时觉得自己没有竞争力&#xff0c;很没有自信&#xff0c;以至于很害怕找工作面试&#xff0c;被人否定的感觉很不好受。 其实很多工作并没有想象中的高大上&#xff0c;不要害怕&#xff0c;计算机就业的方向是真的广&#xff0c;不要走窄了&…

朋友圈新功能:实现定时发圈,自动跟圈

1.多号同时发圈 可以选择多个号同时发圈&#xff0c;提高工作效率。 2.定时发布 可以一次性设置完很多天的朋友圈&#xff0c;选好发送时间就可以解放双手。 3.一键转发 点击转发&#xff0c;可直接跳转到编辑页面。无需复制粘贴。 4.自动转发&#xff08;跟圈&#xff09; …

机能学实验通过ZL-620C一体化信息化生物信号采集系统具体呈现

ZL-621大屏教学试教系统为了实施机能学实验的教学改革&#xff0c;大力减轻教师的实验教学负担&#xff0c;主要功能电子白板&#xff0c;同步教学、控制、过程仿真、虚拟现实、三维动画、管理、音视频广播、PPT教材等于一体&#xff0c;大屏教学试教系统并能同时实现屏幕监视和…

湖北文理学院2024年成人高等继续教育招生简章

湖北文理学院&#xff0c;作为一所历史悠久、底蕴深厚的学府&#xff0c;始终致力于为社会各界培养具备高素质、专业技能和创新精神的优秀人才。在成人高等继续教育领域&#xff0c;湖北文理学院更是凭借其卓越的教学质量和丰富的教育资源&#xff0c;吸引了众多有志于提升自身…

Cesium入门学习(一)

下载cesium源代码 安装依赖 npm install注册账户&#xff0c;申请一个token 没有这个token&#xff0c;会导致地图中只能看到一个宇宙&#xff0c;没有办法看到地球 cesium的官网&#xff1a;cesium官网 替换token 替换对应位置的token 启动 运行 npm run build npm r…