背包模型——AcWing 423. 采药

背包模型

定义

背包模型是一种常见的算法问题模型,它主要涉及将一些物品放入一个容量有限的背包中,以达到某种最优目标,如最大化价值或最小化重量等。

运用情况

常用于资源分配、项目选择、货物装载等实际问题中。例如,在选择要携带哪些物品进行旅行时,考虑物品的价值和重量以及背包的容量限制;或者在一些项目投资决策中,根据项目的收益和成本以及可用资金来进行最优选择。

注意事项

  • 要明确物品的属性(价值、重量等)和背包的容量限制。
  • 注意边界情况的处理,避免出现错误。
  • 对于不同的约束条件和目标函数,需要选择合适的算法和策略。

解题思路

  • 确定问题的状态,通常是背包的剩余容量和已选择的物品。
  • 根据状态转移方程来计算最优解。
  • 可能需要遍历所有物品和背包容量的不同情况来找到最终答案。

例如,假设有 3 个物品,重量分别为 2、3、4,价值分别为 3、4、5,背包容量为 5。那么通过逐步分析每个物品是否放入背包,来找到能使背包内价值最大的组合。

核心思想

  1. 一是在有限的资源(背包容量)约束下,通过对不同物品(具有一定的价值和占用一定的资源量)进行合理的选择和组合,以实现某种特定的最优目标,如价值最大化、利益最大化等。它强调了在资源有限的情况下做出最优决策的重要性。例如,在给定背包容量的情况下,要决定选择哪些物品放入背包才能使总价值达到最大。
  2. 二是通过分析不同物品的属性以及它们与背包容量的关系,来确定最佳的选择策略。这可能涉及到对每个物品的价值和资源占用进行权衡,以及考虑不同物品组合带来的效果。比如,可能需要比较选择某个物品所带来的价值增加与占用背包容量的代价,以决定是否将其放入背包。
  3. 三是运用动态规划等算法思想来高效地求解问题。通过逐步构建最优解的过程,从简单的情况逐步推导出复杂的情况,从而找到全局的最优解。举例来说,通过计算前几个物品在不同容量下的最优解,为后续物品的选择提供依据,逐步得到整个问题的最优解。

背包问题变体

  1. 0-1 背包问题:这是最基本的背包问题,每个物品只能选择一次,要么放入背包,要么不放入背包。
  2. 完全背包问题:在这个变体中,每个物品可以被无限次地选择放入背包。
  3. 多重背包问题:每个物品都有一个有限的数量,并且可以被选择多次,但不能超过其数量限制。
  4. 有界背包问题:每个物品的价值和重量都有上下界限制。
  5. 分数背包问题:物品可以被分割成任意部分,并且每个部分都有相应的价值和重量。
  6. 多维背包问题:将背包问题扩展到多个维度,例如考虑背包的体积、重量等多个因素。
  7. 动态背包问题:背包的容量或物品的数量在问题求解过程中是动态变化的。
  8. 随机背包问题:物品的价值或重量是随机的,需要考虑概率因素。
  9. 带约束的背包问题:除了背包容量的限制外,还有其他约束条件,如物品之间的兼容性、背包的数量限制等。
  10. 目标优化背包问题:除了最大化背包中物品的总价值外,还可以考虑其他目标,如最小化背包的重量、最大化物品的数量等。

AcWing 423. 采药

题目描述

423. 采药 - AcWing题库

运行代码

#include <iostream>
#include <vector>
using namespace std;
int maxValue(int T, int M, vector<int>& times, vector<int>& values) {vector<vector<int>> dp(M + 1,vector<int>(T + 1, 0));for (int i = 1; i <= M; i++) {for (int t = 1; t <= T; t++) {if (times[i - 1] <= t) {dp[i][t] = max(dp[i - 1][t], dp[i - 1][t - times[i - 1]] + values[i - 1]);} else {dp[i][t] = dp[i - 1][t];}}}return dp[M][T];
}
int main() {int T, M;cin >> T >> M;vector<int> times(M);vector<int> values(M);for (int i = 0; i < M; i++) {cin >> times[i] >> values[i];}int result = maxValue(T, M, times, values);cout << result << endl;return 0;
}

代码思路

  • maxValue函数:

    • 创建一个二维的 dp数组来进行动态规划计算。
    • 通过两个嵌套的循环遍历所有可能的草药(i从 1 到 M)和时间(t从 1 到 T)。
    • 对于每个草药和当前时间,如果当前草药的采摘时间小于等于当前可用时间,就比较不采摘该草药(即 dp[i-1][t])和采摘该草药后用剩余时间去获取其他草药价值加上该草药本身价值(即 dp[i-1][t-times[i-1]]+values[i-1]),取较大值更新 dp[i][t];如果采摘时间超过了可用时间,就直接继承上一轮该时间点的价值(即 dp[i-1][t])。
    • 最后返回 dp[M][T],也就是在给定时间和草药情况下能获得的最大总价值。
  • main函数:

    • 输入总的可用时间 T和草药的数量 M
    • 创建两个向量分别用于存储每个草药的采摘时间和价值。
    • 通过循环读取每个草药的具体信息。
    • 调用 maxValue函数计算并得到结果,最后输出。

其它代码

#include <iostream>using namespace std;const int N = 1010;int n, m;
int f[N];int main()
{cin >> m >> n;for(int i = 0; i < n; i ++ ){int v, w;cin >> v >> w;for(int j = m; j >= v; j -- ) f[j] = max(f[j], f[j - v] + w);}cout << f[m] << endl;return 0;
}

代码思路

  • 定义了一个常量 N 用于表示一些固定的规模。
  • 有两个变量 n 表示物品的数量,m 表示背包的容量。
  • 定义了一个数组 f[N] 用于进行动态规划计算。
  • 在 main 函数中:
    • 首先输入背包容量 m 和物品数量 n
    • 然后通过一个循环依次输入每个物品的价值 v 和重量 w
    • 对于每个物品,再通过一个内层循环从背包容量 m 开始倒序遍历到当前物品的价值 v。在这个过程中,不断更新 f[j],即判断当前背包容量为 j 时,不选该物品(即保持 f[j] 不变)和选择该物品(即 f[j - v] + w)哪种情况能得到更大的价值,取最大值更新 f[j]。这样就实现了在每个阶段根据已有的选择来确定最优的当前选择。
    • 最后输出背包容量为 m 时对应的最大价值,也就是 f[m]

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

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

相关文章

深圳比创达EMC|EMC与EMI滤波器:在电子设备中的平衡之道

随着科技的快速发展&#xff0c;电子设备已经深入到我们生活的方方面面&#xff0c;从家用电器到工业设备&#xff0c;从通信设备到医疗仪器&#xff0c;都离不开电子技术的支持。然而&#xff0c;电子设备在带来便利的同时&#xff0c;也面临着电磁兼容&#xff08;EMC&#x…

照片变漫画怎么弄?这5个照片变漫画方法超简单

在艺术和社交融合的现在&#xff0c;将照片转换为漫画风格已经成为一种流行趋势。 无论是为了创造个性化的头像&#xff0c;还是制作有趣的社交媒体帖子&#xff0c;拥有一款能够将照片转换为漫画的软件将极大地丰富你的创意表达。 下面&#xff0c;本文将介绍几款能够实现这…

【浦语开源】深入探索:大模型全链路开源组件 InternLM Lagent,打造灵笔Demo实战指南

一、准备工作&#xff1a; 1、环境配置&#xff1a; pip、conda换源&#xff1a; pip临时换源&#xff1a; pip install -i https://mirrors.cernet.edu.cn/pypi/web/simple some-package# 这里的“https://mirrors.cernet.edu.cn/pypi/web/simple”是所换的源&#xff0c;…

TDengine 推出新连接器,与 Wonderware Historian 无缝连接

在最新发布的TDengine 3.2.3.0 版本中&#xff0c;我们进一步更新了 TDengine 的数据接入功能&#xff0c;推出了一款新的连接器&#xff0c;旨在实现 Wonderware Historian&#xff08;现称为 AVEVA Historian&#xff09;与 TDengine 的集成。这一更新提供了更加便捷和高效的…

什么是钢直尺“光学影像式”仪器校准方法?

计量和我们生活密不可分&#xff0c;但是对于计量的了解大多数人并不深入&#xff0c;因此也会存在一些认知上的误差。比如一个体温计买来才几十块&#xff0c;但是做一次校准费用就是一两百。又或者是一把钢直尺才十几块成本&#xff0c;校准的费用却是成本的三到四倍。 不了…

选择诊所管理系统的原则是什么?

如今&#xff0c;诊所管理系统已成为医疗机构提升管理效率、优化患者服务的重要工具。然而&#xff0c;市场上的诊所管理系统琳琅满目&#xff0c;功能各异&#xff0c;因此&#xff0c;如何选择一款适合自己诊所的管理系统&#xff0c;是许多诊所管理者需要思考的问题。下面&a…

SpringBoot-在配置文件中使用Profile

Profile&#xff0c;译为“配置文件” 在这里的Spring Boot也是一样&#xff0c;我们可以配置很多个Profile&#xff0c;每个Profile都对应一整个完整的全局配置&#xff0c;激活哪个&#xff0c;那个对应的全局配置就生效&#xff0c;具体的配置&#xff1a; 1、properties格…

[leetcode]number-of-longest-increasing-subsequence

. - 力扣&#xff08;LeetCode&#xff09; class Solution { public:int findNumberOfLIS(vector<int> &nums) {int n nums.size(), maxLen 0, ans 0;vector<int> dp(n), cnt(n);for (int i 0; i < n; i) {dp[i] 1;cnt[i] 1;for (int j 0; j < i…

操作系统入门 -- 内存管理

操作系统入门 – 内存管理 1.内存种类 1.1 虚拟内存&#xff08;VIRT&#xff09; 进程需要的虚拟内存大小&#xff0c;包括进程使用的库、代码、数据以及malloc、new分配的堆空间和栈空间等。若进程申请了10MB内存但实际使用了1MB&#xff0c;则物理空间会增长10MB。 1.2 …

【MySQL连接器(Python)指南】06-连接器连接参数

文章目录 前言连接器连接参数总结前言 MySQL连接器(Python),用于让Python程序能够访问MySQL数据库。要想让Python应用程序正确高效地使用MySQL数据,就需要深入了解MySQL连接器的特性和使用方法。 上篇文章👉《【MySQL连接器(Python)指南】05-通过连接器操作MySQL数据库》 …

LKD-Net: Large Kernel Convolution Network for Single Image Dehazing

LKD-Net&#xff1a;用于单幅图像去噪的大型核卷积网络 摘要 基于深度卷积神经网络(CNN)的单幅图像去噪方法已经取得了很大的成功。以往的方法致力于通过增加网络的深度和宽度来提高网络的性能。目前的方法侧重于增加卷积核的大小&#xff0c;以受益于更大的接受野来增强其性能…

【C++】关于虚函数的理解

深入探索C虚函数&#xff1a;原理、应用与实例分析 一、虚函数的原理二、虚函数的应用三、代码实例分析四、总结 在C面向对象编程的世界里&#xff0c;虚函数&#xff08;Virtual Function&#xff09;扮演着至关重要的角色。它不仅实现了多态性这一核心特性&#xff0c;还使得…

我用过最好的GPT,NewspaceGPT使用心得

记住网址&#xff1a;https://newspace.ai0.cn 前言 只要你能表达明白&#xff0c;NewspaceGPT就不会让你失望。 Gpt4o预测GPT5 IT之家6月22日消息&#xff0c;在美国达特茅斯工程学院周四公布的采访中&#xff0c;OpenAI首席技术官米拉穆拉蒂被问及GPT-5是否会在明年发布&…

VMware Workstation搭建Windows Server2019主备AD域控详细操作步骤

版本 虚拟机版本 VMware Workstation 16 Prp 16.2.5 build-20904516 服务器系统版本 具体操作 安装第一台虚拟机服务器 首先先创建一台Windows Server2019虚拟机&#xff0c;可以参考VMware Workstation安装Windows Server2019系统详细操作步骤-CSDN博客 克隆第一台虚拟机…

VMware Workstation环境下,FTP服务的安装配置,用MX Linux来测试

需求说明: 某企业信息中心计划使用IP地址17216.11.0用于虚拟网络测试,注册域名为xyz.net.cn.并将172.16.11.2作为主域名的服务器(DNS服务器)的IP地址,将172.16.11.3分配给虚拟网络测试的DHCP服务器,将172.16.11.4分配给虚拟网络测试的web服务器,将172.16.11.5分配给FTP服务器…

电通出席2024年世界经济论坛(WEF),重申推动可持续发展创新和人才培育的承诺

中国&#xff0c;上海——电通将出席世界经济论坛2024年新领军者年会&#xff08;夏季达沃斯&#xff09;&#xff0c;本次大会将于6月25日至6月27日在中国大连举行。 2024年世界经济论坛主题为“未来增长的新前沿”&#xff0c;将聚焦于全球经济复苏、通胀缓解&#xff0c;以…

Windows bat 提取多个目录下的文件,到一个目录

批处理命令 echo off setlocalrem 设置源目录和目标目录 set "sourceDirE:\motrix" set "targetDirE:\新建文件夹"rem 创建目标目录&#xff0c;如果不存在 if not exist "%targetDir%" mkdir "%targetDir%"rem 循环遍历源目录中的所…

【深度学习总结_03】使用弱智吧数据微调LLama3+自我认知训练

使用弱智吧数据微调LLama3自我认知训练 使用弱智吧数据微调LLama3自我认知训练下载LLama3权重准备数据集克隆alpaca-lora仓库修改finetune.py代码修改LlamaTokenizer注释代码手动安装apex 运行finetune.py运行generate.py文件导出Lora模型自我认知训练 使用弱智吧数据微调LLama…

4K高清全屏壁纸免费下载网站

在当今这个视觉效果至上的时代&#xff0c;高清壁纸已经成为许多人装饰桌面的重要选择。特别是4K高清壁纸&#xff0c;以其超高的分辨率和细腻的画面质感&#xff0c;深受广大用户的喜爱。如果你正在寻找一个可靠的4K高清全屏壁纸免费下载网站&#xff0c;不妨来看看以下几个推…

学好 prompt 让大模型变身撩富婆专家,带你走上人生巅峰

前文 使用大模型的最重要的一步就是编写好的提示词 prompt &#xff0c;但是 prompt 既容易被低估也容易被高估。被低估是因为设计良好的提示词可以显著提升效果。被高估是因为即使是基于提示的应用也需要大量的工程工作才能使其发挥作用。下面我会介绍在编写 prompt 的时候&a…