当前位置:首页 > 入门组 > NOIP2005 普及组 洛谷P1408 背包问题的空间优化技巧与实战应用

NOIP2005 普及组 洛谷P1408 背包问题的空间优化技巧与实战应用

2个月前 (05-22)

NOIP2005 普及组 洛谷P1408 背包问题的空间优化技巧与实战应用 洛谷 NOIP 2005 动态规划 01背包 C++ 算法 第1张

题目重解

想象你是一名药师,有t分钟在山上采集m种草药。每种草药需要time分钟采集,价值为num。这就像考试时分配时间做题,要选择收益最大的题目组合。题目要求计算在规定时间内能获得的最大草药价值。

解题思路

代码实现分为三个阶段:

初始化阶段:创建dp数组表示各时间段的最优解,初始值为0(未采集任何草药的状态)

动态转移阶段:对每种草药逆序更新dp数组,确保每种草药只被计算一次。状态转移方程dp[j] = max(保持原状, 采集当前草药)体现了取舍决策

输出结果:直接读取dp[t]即为时间上限下的最优解

代码注释版

#include<iostream>
using namespace std;
int main()
{
    int t,m;  // 总时间t分钟,草药种类m
    cin>>t>>m;
    
    int* dp=new int[t+1]; // dp数组:dp[j]表示j分钟内的最大价值
    int time,num;  // 当前草药的采集时间和价值
    
    for(int i=0;i<m;i++){  // 遍历每种草药
        cin>>time>>num;
        // 逆序更新防止重复采集
        for(int j=t;j>=time;j--)  
            dp[j]=max(dp[j], dp[j-time]+num); // 经典状态转移
    }
    cout<<dp[t];  // 输出最终结果
    
    return 0;
}


原创内容 转载请注明出处

分享给朋友:

相关文章

力扣540题:线性扫描法如何高效定位唯一数

力扣540题:线性扫描法如何高效定位唯一数

题目重解一个严格递增的有序数组中,除某个元素外,其余每个元素均出现两次。这个看似简单的条件背后隐藏着巧妙的规律——单一元素会打破数组的"成对对称性"。题目要求以O(log n)时间...

2024年GESP五级武器强化(洛谷B4071)解题代码C++版

2024年GESP五级武器强化(洛谷B4071)解题代码C++版

一、题目解读    2024年GESP(青少年软件编程能力等级考试)五级中的“武器强化”(洛谷平台题目编号B4071)是一道典型的算法优化问题。题目要求通过合理...

CSP-J 2019纪念品题解(洛谷P5662):动态规划+完全背包问题的实战应用

CSP-J 2019纪念品题解(洛谷P5662):动态规划+完全背包问题的实战应用

一、题目解读2019年CSP-J的“纪念品”问题(对应洛谷P5662)要求玩家在T天内通过买卖纪念品最大化金币收益。每天可交易N种商品,需计算最优策略下的最终金币数。题目强调动态规划思维与资源分配优化...

2024蓝桥杯省赛B组“传送阵”题解(C++代码+图论算法优化)

2024蓝桥杯省赛B组“传送阵”题解(C++代码+图论算法优化)

一、题目解读2024年蓝桥杯省B组“传送阵”题目要求处理一个包含n个节点的图,节点间存在单向传输关系。每个节点i可传送至a[i]指定的节点,形成可能存在的环结构。题目需求解从任意节点出发能到达的最长路...

1999年NOIP提高组导弹拦截(洛谷P1020)解题思路与动态规划代码解析

1999年NOIP提高组导弹拦截(洛谷P1020)解题思路与动态规划代码解析

一、题目解读    1999年NOIP提高组“导弹拦截”问题(对应洛谷P1020)要求设计导弹拦截系统:给定一组导弹高度数据,需计算最少拦截系统数量,并求最多能...

洛谷2789题解:直线交点数的递归求解与优化(附代码详解)

洛谷2789题解:直线交点数的递归求解与优化(附代码详解)

一、题目解读洛谷2789题要求计算n条直线在平面上两两相交时产生的不同交点数量。题目强调“不同”交点,需排除重复情况。解题关键在于如何高效枚举所有可能的交点组合,并避免重复计数。二、解题思路参考代码采...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。