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

01背包P1048 [NOIP 2005 普及组] 采药

P1048 [NOIP 2005 普及组] 采药
题目来源-洛谷网
在这里插入图片描述

题意

  • 山洞里有M株草药,采第i株草药耗时t[i],价值w[i]。
  • 要在时间T内采一些草药,使得草药的价值和最大。

思路

贪心只能局部求解,典型的01背包,表格法求解

对于f[i] [j],有两种选择:

  • 不采第i株草药,价值和为f[ i-1] [j]
  • 第i株草药,价值和为f[i-1] [j-t[i]]+w[i] (j>=t[i])在两种选择中取较大值即可得到f[i] [j]。
  • 动态转移方程: f[i][j] = max(f[i-1][j],f[i-1][j-t[i]]+w[i]);

由于数据只和上一行中j行之前的数据有关,可以直接压缩成一维数组,从后往前遍历即可(保证j行之前的数据先被用,然后再更新) f[j] = max(f[j],f[j-t[i]]+w[i]);

参考代码

#include <bits/stdc++.h>
using namespace std;
int t[105], w[105], f[105][1005];
int main() {int T, M;cin >> T >> M;for (int i = 1; i <= M; i++)cin >> t[i] >> w[i];for (int i = 1; i<=M; i++) // 枚举第一个到最后一个草药for (int j = 1;j<=T; j++) {// 枚举 0 秒到 T 秒f[i][j] = f[i-1][j]; // 不选第 i 株草药-必须要处理,如果时间不够采药,是不会进入下一步 if (j>=t[i])     // 如果时间足够采第 i 株f[i][j] = max(f[i-1][j],f[i-1][j-t[i]]+w[i]); // 尝试采摘,看会不会收益更大}cout << f[M][T] << endl;  return 0;
}
http://www.lryc.cn/news/579976.html

相关文章:

  • [netty5: ByteToMessageCodec MessageToByteEncoder ByteToMessageDecoder]-源码分析
  • CCViM Block(上下文聚类视觉曼巴模块),通过多方向扫描(水平 / 垂直 / 翻转)提取目标延展特征,结合聚类层对边界点的动态聚合,提升目标的定位能力
  • Python爬虫 模拟登录状态 requests版
  • Vue2中的keep-alive:组件状态缓存与性能优化实战指南
  • Linux 如何上传本地文件以及下载文件到本地命令总结
  • Linux探秘坊-------13.进程间通信
  • 五、Flutter动画
  • 【AI总结】Git vs GitHub vs GitLab:深度解析三者联系与核心区别
  • 【Git】git命令合集
  • 网安系列【4】之OWASP与OWASP Top 10:Web安全入门指南
  • Rust 闭包
  • 暴雨服务器成功中标华中科技大学集成电路学院服务器采购项目
  • 封装一个png的编码解码操作
  • 数据库位函数:原理、应用与性能优化
  • 企业该怎么做竞争分析?一文了解
  • Linux-进程概念(3)
  • 【WEB】Polar靶场 6-10题 详细笔记
  • 类图+案例+代码详解:软件设计模式----原型模式
  • vue3 el-table 行筛选 设置为单选
  • 电商分拣的“效率密码”:艾立泰轻量化托盘引领自动化流水线革新
  • vue3 获取选中的el-table行数据
  • 【WRFDA第三期】OBSPROC namelist 变量总结
  • Ubuntu 22.04 + MySQL 8 无密码登录问题与 root 密码重置指南
  • OpenCV中DPM(Deformable Part Model)目标检测类cv::dpm::DPMDetector
  • 前端基础知识Webpack系列 - 03(webpack中常见的Loader?解决了什么问题?)
  • STM32CubeMX教程1 实现点灯点灯
  • 量化开发(系列第3篇): C++在高性能量化交易中的核心应用与技术栈深度解析
  • 三态逻辑详解:单片机GPIO、计算机总线系统举例
  • 【python实用小脚本-128】基于 Python 的 Hacker News 爬虫工具:自动化抓取新闻数据
  • RK-Android11-性能优化-限制App内存上限默认512m