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

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

2个月前 (05-22)

NOIP2005 普及组 洛谷P1408 背包问题的空间优化技巧与实战应用 洛谷 NOIP  动态规划 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;
}


原创内容 转载请注明出处

分享给朋友:

相关文章

【深度优先搜索实战】力扣547题:省份数量问题的图论解法

【深度优先搜索实战】力扣547题:省份数量问题的图论解法

题目解读‌我们面对的是一个典型的图论问题:给定一个城市的连接矩阵,需要计算其中相互连通的城市群(省份)数量。这个问题可以抽象为无向图中的连通分量计算,每个城市代表图中的一个节点,城市之间的连接关系代表...

从零到一掌握背包问题:洛谷P1164题解精讲,附带优化

从零到一掌握背包问题:洛谷P1164题解精讲,附带优化

题目重解:小A带着m元钱来到餐馆,菜单上有n道菜,每道菜都有确定的价格。现在需要计算出刚好花完m元的点菜方案总数。这个问题看似简单,但当菜品数量增多时,暴力枚举就会变得不可行,需要更高效的算法来解决。...

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

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

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

手搓顺序表类代码注释与详解:从零实现动态数组(新手教程)

一、简介和特点顺序表(Sequential List)是数据结构中基础的一种线性表,其特点是将数据元素存储在连续的内存空间中。通过数组实现,支持随机访问(即通过索引直接访问元素),适用于频繁随机读取的...

CSP-J方格取数题解|动态规划解法|洛谷P7074代码解析

CSP-J方格取数题解|动态规划解法|洛谷P7074代码解析

一、题目解读题目要求在一个n×m的网格中,从左上角到右下角选择一条路径,路径上的数字可重复取用,求取数之和的最大值。路径限制为仅能向右或向下移动。需注意路径的灵活性与重复取数的可能性,传统单向动态规划...

LeetCode 120题三角形最小路径和最优解法:动态规划详解与代码实现

LeetCode 120题三角形最小路径和最优解法:动态规划详解与代码实现

一、题目解读LeetCode 120题“三角形最小路径和”要求给定一个由数字组成的三角形,从顶部开始向下移动,每次可向左或向右移动一格,计算从顶至底的最小路径和。三角形以二维向量形式给出,每层元素数量...

发表评论

访客

看不清,换一张

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