博客
关于我
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网站打开慢问题排查&数据库优化
    查看>>
    mysql网络部分代码
    查看>>
    mysql联合索引 where_mysql联合索引与Where子句优化浅析
    查看>>
    mysql联合索引的最左前缀匹配原则
    查看>>
    MySQL聚簇索引
    查看>>
    mysql自动化同步校验_Shell: 分享MySQL数据同步+主从复制自动化脚本_20190313_七侠镇莫尛貝...
    查看>>
    Mysql自增id理解
    查看>>
    mysql自增id超大问题查询
    查看>>
    MySQL自定义变量?学不废不收费
    查看>>
    MySQL自带information_schema数据库使用
    查看>>
    MySQL获取分组后的TOP 1和TOP N记录
    查看>>
    mysql虚拟列表_动态网页制作-官方版合集下载-多特
    查看>>
    MySQL蜜罐反制获取攻击者信息
    查看>>
    Mysql表创建外键报错
    查看>>
    mysql表格调取数据库信息_MySQL™ 参考手册(获取有关数据库和表的信息)
    查看>>
    mysql表检查分析优化
    查看>>
    WARN: Establishing SSL connection without server‘s identity verification is not recommended.
    查看>>
    Mysql覆盖索引
    查看>>
    MySQL视图
    查看>>