动态规划----背包问题(01背包问题)

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

例题洛谷P1048

[NOIP2005 普及组] 采药

题目描述

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

如果你是辰辰,你能完成这个任务吗?

输入格式

第一行有 2 2 2 个整数 T T T( 1 ≤ T ≤ 1000 1 \le T \le 1000 1≤T≤1000)和 M M M( 1 ≤ M ≤ 100 1 \le M \le 100 1≤M≤100),用一个空格隔开, T T T 代表总共能够用来采药的时间, M M M 代表山洞里的草药的数目。

接下来的 M M M 行每行包括两个在 1 1 1 到 100 100 100 之间(包括 1 1 1 和 100 100 100)的整数,分别表示采摘某株草药的时间和这株草药的价值。

输出格式

输出在规定的时间内可以采到的草药的最大总价值。

样例 #1

样例输入 #1

70 3
71 100
69 1
1 2

样例输出 #1

3

提示

【数据范围】

  • 对于 30 % 30\% 30% 的数据, M ≤ 10 M \le 10 M≤10;
  • 对于全部的数据, M ≤ 100 M \le 100 M≤100。

【题目来源】

NOIP 2005 普及组第三题

题解

这是一道十分经典的DP(动态规划)问题 (但是折磨了我好久QAQ) (害怕)
其实理解了以后就很简单,这里通过列表的方法来帮助理解AWA

i1234
w2345
v3456

其中 i 表示物品编号, w 表示该物品的重量, v 表示该物品的价格
然后我们可以列出状态转移方程:
dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - w[i]] + v[i]);
为什么是这样呢,别急再列个表就知道了
我们将数据分别代入动态转移方程可以得到该表:在这里插入图片描述
这样就很好理解啦,这里再附上一张图:
在这里插入图片描述

(图片转载于Yngz_Miao)
这样就非常好理解啦~
干饭去了,撤退!
补充: 这里有一个问题可能会困扰一些人 刚开始我也被困扰了好久QAQ(汗) ,dp[i][j-w[i]]数组所指向的状态,若可以将两个物品都放入,则dp数组所指向的状态就可以加上现在这个物品的价值,同时再减去所需的空间, 所以不难发现,这个动态规划的 阶段 就是物品的编号, 状态 就是背包中还剩下的空间.

-分界线–分界线–分界线–分界线–分界线–分界线–分界线–分界线–分界线–分界线–分界线–分界线-

干晚饭了回来继续写题解啦(笑~)

其实这个背包是可以优化的,在空间上可以将这个数组压成一维的数组:
  通过分析我们可以发现,每一个阶段的某个状态是由上一个阶段前面的状态推到出来的,所以,我们可以尝试从后往前推导, 因为后面元素靠前面的元素更新,且不会影响前面的元素 ,所以只需要在第二层循环的时候从后往前循环,就可以压缩空间 似乎好像也避免了重复

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

相关推荐

动态规划——01背包问题(Java实现)

动态规划算法: 动态规划算法介绍: 动态规划算法的核心思想是:将大问题划分为小问题进行解决,从而一步步获得最优解的处理算法。 动态规划算法的基本思想是:将待求解的问题分解成若干子问题,先求解子问题,然后从这些子问题的解得到原问题的解。 适合用于动态规划的求解的问题,经分解得到子问题往往不是互相独立的。(即下一个子阶段的求解是建立在上一个子阶段的解的基础上,进行进一步的求解) 动态规划可以通过填表的方式来逐步推进,得到最优解。 动态规划算法最佳实践:背包问题 有一个背包,容量为4磅,现有如下物品 :

nswdiphone6的博客 6325

24339 Problem B 采药

问题 B: 采药 时间限制: 1 Sec  内存限制: 128 MB 提交: 67  解决: 49   题目描述 辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师。为此,他想拜附近最有威望的医师为师。 医师为了判断他的资质,给他出了一个难题。 医师把他带到一个到处都是草药的山洞里对他说:“孩子,这个山洞里有一些不同的草药,采每一株都需要一些时间,每一株也有它自身的价值。我会给你一...

漫浸天空的雨色的备忘录~ 1745

动态规划DP——01背包问题

01 背包问题   今天在算法课上讲解了动态规划算法,其中讲到了01背包问题。这是一种典型的动态规划问题,于是下课之后我使用java进行了相对应的代码实现。动态规划求解具有以下的性质: 1.最优子结构性质:最优解包含了其子问题的最优解,不是合并所有子问题的解,而是找最优的一条解线路,选择部分子最优解来达到最终的最优解。 2.子问题重叠性质:先计算子问题的解,再由子问题的解去构造问题的解(由于子问题...

qq_30091249的博客 4971

每日一题(三十六):0-1背包

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

老肥码码码 774

c++使用动态规划求解01背包问题

- 什么是01背包问题? 在01背包问题中,因为每种物品只有一个,对于每个物品只需要考虑选与不选两种情况。 如果不选择将其放入背包中,则不需要处理。如果选择将其放入背包中,由于不清楚之前放入的物品占据了多大的空间,需要枚举将这个物品放入背包后可能占据背包空间的所有情况。 需要注意的是:01背包问题不能使用贪心思想,因为每次选取最大的并不能保证背包刚好装满,遇到01背包问题先找到题目中的“背包”和“物品”,写出状态转移方程。 例题: 【问题描述】 发鸠之山,其上多柘木。有鸟焉,其状如乌,文首,白喙,赤足,

qq_44301896的博客 1970

AcWing 423 采药

题目描述: 辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师。 为此,他想拜附近最有威望的医师为师。 医师为了判断他的资质,给他出了一个难题。 医师把他带到一个到处都是草药的山洞里对他说:“孩子,这个山洞里有一些不同的草药,采每一株都需要一些时间,每一株也有它自身的价值。我会给你一段时间,在这段时间里,你可以采到一些草药。如果你是一个聪明的孩子,你应该可以让采到的草药的总价值最大。” 如果你是辰辰,你能完成这个任务吗? 输入格式 输入文件的第一行有两个整数T和M,用一个空格隔开,T代表总共能够用来采药的时间,M代表山洞里的草药的数目。 接下来的M行每行包括两个在1到100之间(包括1和

动态规划——01背包问题

面向小白的动态规划之01背包问题的详细讲解

Wu_L7的博客 3万+

OpenMV模块视觉测距(避障)+颜色识别+TFT-LCD显示(实现原理与代码分析)

上图所示代码实际运行的帧率比较低,主要原因有以下两个:1.硬件问题,博主使用的版本比较低,可以尝试使用高版本OpenMV2.图像滤波问题。之前加入图像滤波是想提高色块识别的准确性,但是相应的运算速度也会下降。

ediykk的博客 1万+

【动态规划】01背包问题

【动态规划】01背包问题

一个专注于客户端开发的技术er,不定期更新Android,Flutter,HormonyOS等方向的使用心得和感悟 6843

AI 算力基础设施深度系列(一):从容器到 Kubernetes——算力底座的诞生

1. 容器 = Namespace(视图隔离) + Cgroup(资源限制) + Union FS(镜像分层)└── 不是虚拟机!共享内核,接近零开销2. K8S 三大设计哲学:└── 声明式 API + 控制循环 + 可扩展架构3. K8S 架构:└── 控制面 (API Server / etcd / Scheduler / Controller Manager)

warm3snow的博客 534

图像传感器与信号处理——详解CCD与CMOS图像传感器

一文详解CCD与CMOS图像传感器一文详解CCD与CMOS图像传感器1. 图像传感器性能关键词1.1 噪声1.2 暗电流 一文详解CCD与CMOS图像传感器 本文主要总结了CCD与CMOS传感器的原理知识,参考书籍为《数码相机中图像传感器和信号处理》,英文版为《Image Sensors And Signal Processing for Digital Still Cameras》 1. 图像传...

weixin_44580210的博客 2万+

动态规划之01背包问题

对 01背包的详细讲解,推荐观看。

Jiguoyuanyic的博客 2808

Android 的端智能学习路径

基础层:先补齐 Android 进阶(JNI / 性能优化)和 AI 基础概念,无需深入算法开发;核心层:掌握 TFLite 的模型加载、推理、量化,能完成基础端侧推理;落地层:聚焦实战场景(图像 / OCR / 语音),解决工程化问题(模型管理、异常处理);优化层:通过模型量化、硬件加速、工程优化,提升推理性能和用户体验。

hqiangtai的博客 344

c++动态规划解决01背包问题

动态规划主要运用状态转移方程(即递推方程)解决步骤问题,一般来说遍历方向有从前到后和从后到前,具体问题具体分析下面具体讲解一下动态规划的01背包问题:(一般来说,01背包问题不会刻意出题,但是会解决有限的容量中得到利益最大的一类问题)动态规划(Dynamic Programming, DP)动态规划是一种在数学、计算机科学和经济学中使用的,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。它通常用于求解最优化问题。

qq_63176310的博客 2707

Flutter 直接调用so动态库,或调用C/C++源文件内函数

我把 .so 文件尝试放过好几个目录/lib/,最终都会报这个错误,现在才知道库文件需要放在你根本想象不到的地方!!!尝试了一些方法还是不行后我放弃了 ffi,想着用 Flutter 的 MethodChannel 桥接 android/ios 原生,再让原生去调 native 层。一顿操作把Android端的搞定了,当然中间涉及到 Kotlin和C++ 层的数据类型映射的痛苦,而且业务函数也不像一个 helloworld 那么简单,别提有多痛苦了。

开发以大橘为重 8351

【漏洞修复】Diffie-Hellman Key Agreement Protocol 资源管理错误漏洞(CVE-2002-20001)

Diffie-Hellman Key Agreement Protocol 存在安全漏洞,远程攻击者可以发送实际上不是公钥的任意数字,并触发服务器端DHE模幂计算。

我的博客 1万+

动态规划背包问题之01背包详解

动态规划背包问题之01背包详解

晨的博客 5万+

L298N电机驱动模块的接线使用与代码实现

#include "iostm8s208mb.h" #define u8 uint8_t #define u16 uint16_t #define u32 uint32_t typedef unsigned char uint8_t; typedef unsigned short uint16_t; typedef unsigned long uint32_t; // 关于LED灯的宏定义 #define LED2 PI_ODR_ODR2 //输出量 #define LE

Clichong 13万+

动态规划之背包问题——01背包

文章目录一、01背包问题二、二维dp数组解决01背包问题1. 确定dp数组以及下标的含义2. 确定递推公式3. dp数组初始化4. 确定遍历顺序5. 举例推导dp数组三、一维dp数组解决01背包问题1. 确定dp数组以及下标的含义2. 一维dp数组的递推公式3. 一维dp数组如何初始化4. 一维dp数组遍历顺序5.举例推导dp数组四、leetcode例题讲解01背包问题416. 分割等和子集1049. 最后一块石头的重量 II494. 目标和474. 一和零 背包问题中我们常见的就是01背包和完全背包。在l

小朱小朱绝不认输的博客 1万+

go语言实现服务器server端与客户client端即时通信(附完整源码)

go语言实现服务器server端与客户client端即时通信(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 626

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

动态规划--01背包问题详解

代码随想录day42和day43 动态规划 模块01背包问题 “即使到不了远方,心中也要有远方的模样。”

weixin_63894681的博客 2603

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

动态规划01背包问题-java

01背包问题是背包问题中最经典的一种。

m0_63267251的博客 3053

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

上一篇: 题目:扩展二叉树(树的基本操作)
下一篇: 动态规划----背包问题(完全背包问题)
ResCells
博客等级 码龄4年 191粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值