采药(详细分析(✪ω✪)(✪ω✪))

2023-11-24 19:10
文章标签 详细分析 采药

本文主要是介绍采药(详细分析(✪ω✪)(✪ω✪)),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

解题思路:

首先我们要创建两个数组储存采草药的时间以及采草药的价值,然后再创建一个二维数组用来储存在规定时间内所能采到草药的最大总价值。

时间:time[1050]={0};

价值:val[1050]={0};

二维数组:dp[1050][1050]={0};

 这个二维数组呢,先表示为dp[i][j],[i]这一部分就表示我们采摘草药的序号,[j]这一部分呢,就用来储存我们能够采摘的草药的价值了。

下面来我来为大家介绍一下如何使用这个二维数组

既然是二维数组,那使用它就一定要两个循环

 for(long long i=1;i<=m;i++){for(long long j=t;j>=0;j--){if(j>=time[i]){dp[i][j]=max(dp[i-1][j],dp[i-1][j-time[i]]+val[i]);}else dp[i][j]=dp[i-1][j];}}

这里的t,m就是题上所给的T,M的意思

最外层循环,由1到m,将每个草药都遍历一遍

第二层循环以及循环体,也就是本题的精华部分,j从t开始递减至0,目的就是为了让这个二维数组能够储存能够采到的草药的最大总价值

以样例为例,

 列出数组中所有的数据如下:

i\j

70

69

68

67

66

65

64

……

5

4

3

2

1

0

1

0

0

0

0

0

0

0

0

0

0

0

0

0

0

2

1

1

0

0

0

0

0

0

0

0

0

0

0

0

3

3

2

2

2

2

2

2

2

2

2

2

2

2

0

因为采摘第一个草药所需的时间为71,而总的采药时间为70,所以当i为1时,能够采摘到的草药的价值为0。

采摘第二个草药所需的时间为69,总的采药时间为70,所以当j>=69时,都可以获得这个草药的价值。

第三行的结果就要涉及到循环体了

            if(j>=time[i]){dp[i][j]=max(dp[i-1][j],dp[i-1][j-time[i]]+val[i]);}else dp[i][j]=dp[i-1][j];

这里的判断条件是“剩下的采摘时间j是否大于采摘第i株草药所需的时间time[i]”,如果大于,那么就要减去相应的时间,因为采摘草药总时间是一定的,采摘任何一株草药都会消耗,应该将该草药的价值加上上一行[j-time[i]]处草药的价值,并与上一行j处进行比较,确保在此时间点上所采的药的价值是最大的。

如果小于,那么将上一行的数据移下来就可以了。

那最后的答案就储存在dp[m][t]中。

总代码:

#include<iostream>
using namespace std;
long long dp[1050][1050]={0};
int main()
{long long t,m;long long time[1050]={0};long long val[1050]={0};cin>>t>>m;for(long long i=1;i<=m;i++){cin>>time[i]>>val[i];}for(long long i=1;i<=m;i++){for(long long j=t;j>=0;j--){if(j>=time[i]){dp[i][j]=max(dp[i-1][j],dp[i-1][j-time[i]]+val[i]);}else dp[i][j]=dp[i-1][j];}}cout<<dp[m][t];
}

希望各位大佬多提意见,不足之处还请指出。

也希望各位互相关注点赞,共同进步!Thanks♪(・ω・)ノ

这篇关于采药(详细分析(✪ω✪)(✪ω✪))的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/422411

相关文章

详细分析Springmvc中的@ModelAttribute基本知识(附Demo)

目录 前言1. 注解用法1.1 方法参数1.2 方法1.3 类 2. 注解场景2.1 表单参数2.2 AJAX请求2.3 文件上传 3. 实战4. 总结 前言 将请求参数绑定到模型对象上,或者在请求处理之前添加模型属性 可以在方法参数、方法或者类上使用 一般适用这几种场景: 表单处理:通过 @ModelAttribute 将表单数据绑定到模型对象上预处理逻辑:在请求处理之前

采药问题 01背包

Description:辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师。为此,他想拜附近最有威望的医师为师。医师为了判断他的资质,给他出了一个难题。医师把他带到一个到处都是草药的山洞里对他说:“孩子,这个山洞里有一些不同的草药,采每一株都需要一些时间,每一株也有它自身的价值。我会给你一段时间,在这段时间里,你可以采到一些草药。如果你是一个聪明的孩子,你应该可以让采到的草药的总价值最大。”

期货交易豆粕品种详细分析

文章目录 1、豆粕期货标准(2024年6月22号数据)2、豆粕是什么3、豆粕1、5、9合约区别4、影响豆粕的价格因素1、大豆的供应情况。2、豆粕的季节性3、油粕比(豆油和豆粕的价格关系 ) 5、美国大豆的生产/库存炒作6、豆粕双方,喜欢什么样的炒作题材 开始详细的了解一些品种,以及一些品种之间的关联性。 1、豆粕期货标准(2024年6月22号数据) 根据上面的交易单位

第二章节 Qt信号与槽的详细分析

目录 一、什么是信号与槽 二、信号与槽的关联 1. 使用connect函数 2. 自动连接 三、定义自己的信号 四、定义自己的槽 五、发送信号 六、信号和槽的连接方式 1.直接连接方式 Qt::DirectConnection 2.队列连接: Qt::QueuedConnection 3.阻塞队列连接 Qt::BlockingQueuedConnection 4.自动连接方

c++ static和extern详细分析

一.static作用 1.概念 在C++中,static关键字可以用于多种情况,它的作用取决于具体使用的场景: 在全局变量中使用static:在全局变量前加上static关键字,可以将其作用域限定在当前文件中,这样其他文件无法访问该变量。 在局部变量中使用static:在函数内部的局部变量前加上static关键字,可以使该变量保持其值在函数调用之间持久不变,即仅初始化一次,而不会在每次函

详细分析Element Plus的el-pagination基本知识(附Demo)

目录 前言1. 基本知识2. Demo3. 实战 前言 需求:从无到有做一个分页并且附带分页的导入导出增删改查等功能 前提一定是要先有分页,作为全栈玩家,先在前端部署一个分页的列表 相关后续的功能,是Java,推荐阅读: java框架 零基础从入门到精通的学习路线 附开源项目面经等(超全)【Java项目】实战CRUD的功能整理(持续更新) 1. 基本知识 主要是用于在数

【Python机器学习实战】 | Lasso回归和弹性网回归详细分析研究

🎩 欢迎来到技术探索的奇幻世界👨‍💻 📜 个人主页:@一伦明悦-CSDN博客 ✍🏻 作者简介: C++软件开发、Python机器学习爱好者 🗣️ 互动与支持:💬评论      👍🏻点赞      📂收藏     👀关注+ 如果文章有所帮助,欢迎留下您宝贵的评论, 点赞加收藏支持我,点击关注,一起进步! 引言 Lasso回归(Lasso Regression)和

计算机网络(谢希仁第六版)| 课后习题与答案 | 物理层 | 题目知识点详细分析

计算机网络(谢希仁第六版)课后习题与答案 物理层 博客只对老师给的重点进行整理,完整的课后习题答案见Gitee下载:《计算机网络教程(第6版)(微课版)》习题答案 2-5 请画出数据流1 0 1 0 0 0 1 1的不归零编码、曼彻斯特编码和差分曼彻斯特编码的波形(从高电平开始)。 图2-1 题2-5图 非归零编码(NRZ):高1低0,编码容易实现,但没有检错功能,且无法判断一个

pop链详细分析、构造(以[NISACTF 2022]babyserialize为例)

目录 [NISACTF 2022]babyserialize (一)理清pop链(链尾 链头),标注步骤 1. 先找eval、flag这些危险函数和关键字样(这是链尾) 2.往eval()上面看 3.往$bb()上面看 4.往strtolower()上面看 5.往huang上面看 6.往nisa()上面看 发现需要触发__wakeup()函数,此处即为链头 (二) pop链脚本

采药(信息学奥赛一本通-T1290)

【题目描述】 辰辰是个很有潜能、天资聪颖的孩子,他的梦想是称为世界上最伟大的医师。为此,他想拜附近最有威望的医师为师。医师为了判断他的资质,给他出了一个难题。医师把他带到个到处都是草药的山洞里对他说:“孩子,这个山洞里有一些不同的草药,采每一株都需要一些时间,每一株也有它自身的价值。我会给你一段时间,在这段时间里,你可以采到一些草药。如果你是一个聪明的孩子,你应该可以让采到的草药的总价值最大。”