博客
关于我
ALGO-30 算法训练 入学考试
阅读量:729 次
发布时间:2019-03-21

本文共 812 字,大约阅读时间需要 2 分钟。

为了解决这个问题,我们需要使用动态规划来解决一个典型的0-1背包问题。我们需要在给定的时间内选择草药,使其总价值最大化。

方法思路

  • 问题分析:这个问题类似于0-1背包问题,其中每个物品只能被选择一次,且不能超过总时间限制。
  • 动态规划状态定义:我们定义dp[j]表示在时间j内能够获得的最大价值。
  • 状态转移方程
    • 如果当前草药的采集时间超过剩余时间,直接舍弃该草药。
    • 如果当前草药的采集时间在剩余时间内,选择采集或不采集,取最大值。
  • 优化考虑:使用一维数组来优化空间复杂度,通过逆序遍历时间进行处理。
  • 解决代码

    #include 
    using namespace std;int main() { int T, M; // 读取输入 cin >> T >> M; // 一维数组初始化 int dp[T + 1] = {0}; for (int i = 0; i < M; ++i) { int a, b; cin >> a >> b; for (int j = T; j >= a; --j) { dp[j] = max(dp[j], dp[j - a] + b); } } cout << dp[T] << endl; return 0;}

    代码解释

    • 输入读取:读取总时间T和草药数量M,然后逐行读取每株草药的采集时间和价值。
    • 动态规划数组初始化:使用一维数组dp,初始化为0,表示不选择任何草药时的价值。
    • 处理每株草药:对每株草药,逆序遍历时间,更新可能的最大价值。对于每个时间j,如果草药的采集时间小于等于j,则更新dp[j]为最大价值。
    • 输出结果:最终输出在总时间内的最大价值。

    这种方法确保了我们在给定的时间内选择了最优的草药组合,实现了动态规划的时间和空间优化。

    转载地址:http://grdgz.baihongyu.com/

    你可能感兴趣的文章
    poj3252(组合数)
    查看>>
    Qt笔记——QToolBox开发简易QQ聊天界面
    查看>>
    poj3307
    查看>>
    Qt笔记——QString与隐式共享、MVC架构
    查看>>
    Qt笔记——QSemaphore处理生产者/消费者模式
    查看>>
    Qt笔记——QMutex&QWaitCondition处理生产者消费者模式
    查看>>
    Qt笔记——QLable+QPixmap图片缩放踩坑
    查看>>
    Qt笔记——foreach与forever
    查看>>
    QT程序怎么挪到Linux下,linux+Qt程序如何打包发布
    查看>>
    Qt知识:视图框架QGraphicsWidget详解
    查看>>
    SpringBoot中项目启动及定时任务缓存数据库常用数据至内存变量并转换后高频调用
    查看>>
    Qt知识: 画刷风格
    查看>>
    QT的OpenGL渲染窗QOpenGLWidget Class
    查看>>
    QT的C++程序加载动态链接库DLL(Linux下是so)的方式
    查看>>
    QT界面操作1:如何跟踪鼠标位置?
    查看>>
    Qt环境搭建(Visual Studio)
    查看>>
    QT点击"X"按钮,调用closeEvent()函数来实现调用特定事件(附:粗略介绍QT的信号与槽的使用方法)...
    查看>>
    QT样式表——url路径
    查看>>
    QT数据库(三):QSqlQuery使用
    查看>>
    QT教程5:消息框
    查看>>