当前位置: 首页 > news >正文

2.采药-01背包

[NOIP2005 普及组] 采药 - 洛谷


解题思路:

1.看到此题,很容易想到贪心算法的最优装载问题,那什么时候用贪心,什么时候用DP呢?贪心是比较“目光短浅”的,只考虑当前情况下应该放哪一株草药,那么在排序过程中,肯定是优先选择单位时间内价值更大的草药,当以这种策略选择的时候,每次的选择都是不可逆的,即当把价值比最高的放入背包后,不会再拿出来,而DP是根据背包的容量和价值随时在调整

2.举个例子:当背包容量为100的时候,有两株草药,时间和价值分别是20  90与100 100,很明显前者的价值比更高,但是一旦放入第一株草药后,第二株放不下了,可是放第二株才是正解,价值更高,通常遇到这种题目要去构造一组数据,利用反证等方法推翻一种策略

3.如果是DP问题,可以明显看出是01背包问题,每个物品只有一种,并且有两种选择,放或不放

4.设置状态:dp【i】【j】表示前i种物品在j时刻时的最大价值

5.状态转移:如果第i种物品不放的话,那么j时刻的价值也就是前i-1种物品的价值,即dp[i][j]=dp[i-1][j],如果第i种物品放入的话,那么背包意味着牺牲容量,前i-1中的容量就缩小为j-tt[i],然后再加上第i种物品的价值,放与不放取较大值,dp[i][j]=max(dp[i-1][j-tt[i]]+v[i],dp[i-1][j])

6.初始状态:当时刻j为0的时候,那么价值为0,即dp[i][0]=0,当物品为0的时候,价值也为0 ,即dp[0][j]=0

7.求解目标值dp[m][T]


#include<bits/stdc++.h>
using namespace std;
int tt[110],value[110],dp[110][1005];
int main()
{
	int t,m;
	cin>>t>>m;
	
	for(int i=1;i<=m;i++)//将每株草药的时间和价值存入数组 
	{
		cin>>tt[i]>>value[i];
	}
	
	for(int i=1;i<=m;i++)//枚举每株草药 
	{
		for(int j=1;j<=t;j++)//枚举每个时刻 
		{
			if(j>=tt[i])//如果该时刻可以采摘这株草药 
			{
				dp[i][j]=max(dp[i-1][j-tt[i]]+value[i],dp[i-1][j]);//选择较大价值 
			}
			else
			dp[i][j]=dp[i-1][j];//否则的话继承前i-1种草药的价值 
		}
	}
	
	cout<<dp[m][t];//输出目标值 
	return 0;
}

相关文章:

  • 语法基础(函数)
  • 这几个小插件助你快速提升工作效率
  • Java毕业设计-校园活动赞助与宣传管理系统
  • APS智能排产帮助企业做好生产管理
  • 基于数字孪生的管道数字化平台建设要点
  • Ubuntu系统下安装OpenCV,pytorch,TensorFlow教程
  • shell脚本之数组
  • 智能人体存在感知方案,毫米波雷达感应器成品,智能化感知联动应用
  • 主流跨域方式解析!
  • MMDetection3D简单教程:模型定义、注册与搭建
  • 国内代码托管中心-码云(九)——Git
  • 2022年9月1日:Visual Studio Code 中的 GitHub 简介(未做完)
  • Maven进阶-配置私服(Nexus 的使用)
  • [创业-44]:《从员工到老板,你必须经历的三次跃迁》解读
  • 数据结构之线性表的顺序表(c语言)
  • [Vue CLI 3] 配置解析之 css.extract
  • CentOS7简单部署NFS
  • css系列之关于字体的事
  • ES6 学习笔记(一)let,const和解构赋值
  • in typeof instanceof ===这些运算符有什么作用
  • iOS 系统授权开发
  • Java 内存分配及垃圾回收机制初探
  • js 实现textarea输入字数提示
  • SpiderData 2019年2月13日 DApp数据排行榜
  • Spring Boot MyBatis配置多种数据库
  • springMvc学习笔记(2)
  • SpriteKit 技巧之添加背景图片
  • 仿天猫超市收藏抛物线动画工具库
  • 工程优化暨babel升级小记
  • 区块链分支循环
  • 提醒我喝水chrome插件开发指南
  • 为物联网而生:高性能时间序列数据库HiTSDB商业化首发!
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • 远离DoS攻击 Windows Server 2016发布DNS政策
  • Oracle Portal 11g Diagnostics using Remote Diagnostic Agent (RDA) [ID 1059805.
  • mysql面试题分组并合并列
  • UI设计初学者应该如何入门?
  • 仓管云——企业云erp功能有哪些?
  • 格斗健身潮牌24KiCK获近千万Pre-A轮融资,用户留存高达9个月 ...
  • 机器人开始自主学习,是人类福祉,还是定时炸弹? ...
  • 移动端高清、多屏适配方案
  • ​​​​​​​Installing ROS on the Raspberry Pi
  • ​Distil-Whisper:比Whisper快6倍,体积小50%的语音识别模型
  • ​LeetCode解法汇总2696. 删除子串后的字符串最小长度
  • # 执行时间 统计mysql_一文说尽 MySQL 优化原理
  • #LLM入门|Prompt#1.8_聊天机器人_Chatbot
  • (10)工业界推荐系统-小红书推荐场景及内部实践【排序模型的特征】
  • (23)Linux的软硬连接
  • (分布式缓存)Redis持久化
  • (附源码)springboot教学评价 毕业设计 641310
  • (十二)python网络爬虫(理论+实战)——实战:使用BeautfulSoup解析baidu热搜新闻数据
  • (一)Thymeleaf用法——Thymeleaf简介
  • .halo勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET CORE 2.0发布后没有 VIEWS视图页面文件
  • .NET 使用 JustAssembly 比较两个不同版本程序集的 API 变化