博客
关于我
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/

    你可能感兴趣的文章
    MySQL 触发器
    查看>>
    mysql 让所有IP访问数据库
    查看>>
    MySQL 高可用性之keepalived+mysql双主
    查看>>
    mysql5.6.21重置数据库的root密码
    查看>>
    MySQL5.6忘记root密码(win平台)
    查看>>
    mysql5.7 for windows_MySQL 5.7 for Windows 解压缩版配置安装
    查看>>
    mysql5.7性能调优my.ini
    查看>>
    mysql5.7的安装和Navicat的安装
    查看>>
    MySQL8.0.29启动报错Different lower_case_table_names settings for server (‘0‘) and data dictionary (‘1‘)
    查看>>
    MySQL8修改密码报错ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
    查看>>
    mysqlbinlog报错unknown variable ‘default-character-set=utf8mb4‘
    查看>>
    mysqldump 导出中文乱码
    查看>>
    mysqldump备份时忽略某些表
    查看>>
    mysqlreport分析工具详解
    查看>>
    MySQL一个表A中多个字段关联了表B的ID,如何关联查询?
    查看>>
    MYSQL一直显示正在启动
    查看>>
    MySQL一站到底!华为首发MySQL进阶宝典,基础+优化+源码+架构+实战五飞
    查看>>
    MySQL万字总结!超详细!
    查看>>
    Mysql下载以及安装(新手入门,超详细)
    查看>>
    mysql中cast() 和convert()的用法讲解
    查看>>