背包模型——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]

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

用AI解锁创意设计新思路

在数字化浪潮的推动下&#xff0c;创意设计领域正经历一场由人工智能&#xff08;AI&#xff09;引领的深刻变革。AI技术的崛起不仅显著提升了设计工作的效率&#xff0c;还为设计师们开辟了前所未有的创新空间。 随着AI技术的持续进步&#xff0c;传统的设计流程正在逐步被重…

Lua流媒体服务器支持(MP4视频、桌面直播、摄像头)

本来在做FFMPEG的项目&#xff0c;忽然想到Lua封装FFMPEG与SRS实现一个简易的直播网站何尝不是一个大胆的想法。 示例为初级版本&#xff0c;主要是用来验证可行性和功能性DEMO 演示效果&#xff1a; Lua流媒体直播服务器(支持MP4、桌面直播、摄像头)_哔哩哔哩_bilibili 代码简…

最佳实践 | HelpLook通过PartnerShare实现低成本的市场拓展

在如今许多行业市场竞争非常激烈&#xff0c;扩大品牌影响力、提升产品竞争力成为企业亟待攻克的难题之一。为此&#xff0c;HelpLook AI知识库对接了PartnerShare联盟系统&#xff0c;为SaaS产品如何做好全民分销带来了全新的解决思路。 PartnerShare凭借成熟的推广体系为Hel…

基于Python/MNE处理fnirs数据

功能性近红外光谱技术在脑科学领域被广泛应用&#xff0c;市面上也已经有了许多基于MATLAB的优秀工具包及相关教程&#xff0c;如&#xff1a;homer、nirs_spm等。而本次教程将基于Python的MNE库对fNIRS数据进行处理。 本次教程基于&#xff1a;https://mne.tools/stable/auto_…

宝兰德受邀出席华为开发者大会2024,携手共绘基础软件新篇章

6月21日-23日&#xff0c;华为开发者大会&#xff08;HDC 2024&#xff09;在东莞松山湖举行&#xff0c;作为全球开发者的年度盛会&#xff0c;本次大会汇聚了众多业界精英与前沿技术。华为分享了HarmonyOS、盘古大模型、昇腾AI云服务、GaussDB数据库、自研仓颉编程语言等最新…

一年Java转GO|19K|腾讯 CSIG 一二面经

面经哥只做互联网社招面试经历分享&#xff0c;关注我&#xff0c;每日推送精选面经&#xff0c;面试前&#xff0c;先找面经哥 背景 学历&#xff1a;本科工作经验&#xff1a;一年(不算实习)当前语言&#xff1a;Javabase&#xff1a;武汉部门\岗位&#xff1a;腾讯云‍ 一…

pdf压缩,pdf压缩在线,pdf文件太大怎么变小

在数字化时代&#xff0c;PDF文档因其跨平台、保持原样、易于阅读和打印等特点&#xff0c;成为了我们日常工作和生活中不可或缺的一部分。然而&#xff0c;随着PDF文件的不断累积&#xff0c;存储空间逐渐变得紧张&#xff0c;特别是在处理大量大型PDF文件时&#xff0c;如何有…

深圳大学 软件测试作业 #2

声明&#xff1a;本人上课摆烂选手&#xff0c;稍微听了下&#xff0c;答案仅供参考。 ———————— 1. 考虑下面这个代码&#xff0c;并回答以下的问题。 (a) 请画出上面代码的控制流程图。(20分) (b) 请画出上面代码的数据流程图。(10分) (c) 找出每个变量的定义使…

说点智驾领域的实话!感知|定位|规划控制|就业……

你们有没有一种感觉&#xff0c;近几年自动驾驶技术栈迭代太快&#xff0c;自己稍不留神就与当下主流技术产生脱节了。 其实说实话&#xff0c;并非只有你如此&#xff0c;行业内的工程师都有类似感受。 智能驾驶行业交流群&#xff1a;点击进 分享几个我们最近聊天中的几位朋…

低代码平台如何重塑项目管理:效率与创新的新边界

引言 随着数字化转型的加速和技术创新的推动&#xff0c;低代码开发平台在近年来逐渐崭露头角&#xff0c;成为企业和组织加速应用开发和创新的重要工具。低代码平台通过提供可视化的开发环境和预构建的组件&#xff0c;极大地简化了应用程序的开发过程&#xff0c;使非专业开发…

Vmvare12安装CentOS7.6

Vmvare12安装 注意事项 安装完成以后有这两个虚拟网卡。 CentOS官网镜像地址 https://www.centos.org/download/mirrors/Vmvare安装CentOS7.6 创建虚拟机 安装CentOS7.6 选择桌面版 磁盘分区 上述是确认使用自动分区。 设置密码 设置license information 欢迎页面 CentOS7…

windows 安装 Kubernetes(k8s)

windows 安装 docker 详情见&#xff1a; https://blog.csdn.net/sinat_32502451/article/details/133026301 minikube Minikube 是一种轻量级的Kubernetes 实现&#xff0c;可在本地计算机上创建VM 并部署仅包含一个节点的简单集群。 下载地址&#xff1a;https://github.…

每日一题——Python实现PAT乙级1030 完美数列(举一反三+思想解读+逐步优化)五千字好文

一个认为一切根源都是“自己不够强”的INTJ 个人主页&#xff1a;用哲学编程-CSDN博客专栏&#xff1a;每日一题——举一反三Python编程学习Python内置函数 Python-3.12.0文档解读 目录 初次尝试 再次尝试 代码结构 时间复杂度分析 空间复杂度分析 总结 我要更强 时…

《互联网政务应用安全管理规定》深度解读

《互联网政务应用安全管理规定》的出台&#xff0c;对互联网政务应用的安全提出了一系列具体要求。 2024年5月15日&#xff0c;中央网信办、中央编办、工业和信息化部、公安部等四部门联合公布《互联网政务应用安全管理规定》&#xff08;以下称《规定》&#xff09;&#xff…

手机pdf删除怎么办?只需要2招,就可以快速恢复耶

PDF文件&#xff0c;这个我们日常生活中的常客&#xff0c;越来越受到大家的喜爱。但是&#xff0c;有时候我们会因为一时的疏忽或者清理手机内存而不小心删掉了重要的PDF文件&#xff0c;这可真是让人头疼啊&#xff01;那么&#xff0c;这些pdf删除后&#xff0c;有没有什么好…

一年半测试|17K|商汤科技4轮面经

面经哥只做互联网社招面试经历分享&#xff0c;关注我&#xff0c;每日推送精选面经&#xff0c;面试前&#xff0c;先找面经哥 背景‍‍ 楼主本科&#xff0c;大概一年半工作经验。 之前工作也是测试岗&#xff0c;离职了三个多月再次刷题面试&#xff0c;大概花了一个月准备…

Java露营基地预约小程序预约下单系统源码

轻松开启户外探险之旅 &#x1f31f; 露营热潮来袭&#xff0c;你准备好了吗&#xff1f; 随着人们对户外生活的热爱日益增加&#xff0c;露营已成为许多人周末和假期的首选活动。但你是否曾因找不到合适的露营基地而烦恼&#xff1f;或是因为繁琐的预约流程而错失心仪的营地…

OElove 婚恋系统 v10.2升级真是及时,你们是不是UI团队换了?不得不说这次UI是真美!当然功能也升级了大大的赞!

怎么说呢&#xff0c;成为OE的老用户已经有五年了&#xff0c;当时买的初衷就是在本地做一个响当当的门户但是因为疫情搁浅了。。。实在是入不敷出&#xff01;转行的这几年又看好了婚恋这个行业于是打算冲头再来&#xff0c;我记得我当时还是8.5&#xff0c;功能比较强大就是太…

联邦学习——学习笔记2:联邦学习×资源受限下的自适应本地迭代次数

文章目录 一、符号二、应用场景三、与FedAvg算法区别 本笔记参考自b站up主&#xff1a;丸一口 论文参考自Adaptive Federated Learning in Resource Constrained Edge Computing Systems 原视频链接 一、符号 原文的符号解释如下图绿色字体所注 二、应用场景 就是在资源小…

数据结构历年考研真题对应知识点(栈)

目录 3.1栈 3.1.1栈的基本概念 【栈的特点&#xff08;2017&#xff09;】 【入栈序列和出栈序列之间的关系(2022)】 【特定条件下的出栈序列分析(2010、2011、2013、2018、2020)】 3.1.2栈的顺序存储结构 【出/入栈操作的模拟(2009)】 3.1栈 3.1.1栈的基本概念 【栈…