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

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

10个月前 (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;
}


原创内容 转载请注明出处

分享给朋友:

相关文章

NOIP 2008火柴棒等式题解(C++代码实现)  动态规划与枚举算法详解

NOIP 2008火柴棒等式题解(C++代码实现) 动态规划与枚举算法详解

一、题目解读火柴棒等式问题(NOIP 2008,洛谷P1149)要求使用给定数量的火柴棒,构造形如 A + B = C 的等式,其中A、B、C均为整数,且火柴棒总数恰好等于输入值。需统计符合条件的等式...

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

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

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

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

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

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

2017年 NOIP 提高组 逛公园(洛谷P3953)题解:代码解析与优化

2017年 NOIP 提高组 逛公园(洛谷P3953)题解:代码解析与优化

一、题目解读    2017年NOIP提高组“逛公园”题目(洛谷P3953)要求在有向图中计算从起点到终点满足特定条件的路径数量。题目难点在于处理路径长度限制与...

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

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

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

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

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

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

发表评论

访客

看不清,换一张

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