当前位置:首页 > 提高组 > NOIP 2013提高组积木大赛(洛谷P1969)题解:贪心算法优化与代码解析

NOIP 2013提高组积木大赛(洛谷P1969)题解:贪心算法优化与代码解析

2个月前 (07-14)

NOIP 2013提高组积木大赛(洛谷P1969)题解:贪心算法优化与代码解析 NOIP提高组  贪心算法 第1张

一、题目解读

2013年NOIP提高组“积木大赛”(洛谷P1969)要求处理积木堆叠问题。题目给定n个积木高度,需计算按特定规则堆叠后的总高度差。核心在于识别上升序列的累积增量,而非简单求和。

二、解题思路

观察数据规律后,采用贪心策略:仅统计连续上升的积木高度差。若当前积木高于前一个,则累加差值至结果,避免下降段的无效计算。此思路时间复杂度O(n),无需复杂数据结构

三、解题步骤

1. 输入积木数量n及每个高度值。

2. 初始化前值prev、当前值current与答案ans。

3. 循环遍历高度:若current>prev,执行ans += current - prev。

4. 更新prev为当前值,维持上升判断基准。

5. 输出最终答案。

四、代码与注释

#include <iostream>
using namespace std;

int main() {
    int n;  
    cin >> n;   // 输入积木数量  

    int prev = 0, current = 0, ans = 0;  
    for(int i = 0; i < n; ++i) {  
        cin >> current;   // 读取当前高度  
        if(current > prev) {   // 仅累加上升部分  
            ans += current - prev;  
        }  
        prev = current;   // 更新基准值  
    }  

    cout << ans << endl;  
    return 0;  
}

五、总结

该解法巧妙利用贪心思想,通过局部最优(仅统计上升差)达到全局最优解。代码简洁高效,适用于线性数据场景。注意边界处理(首项默认为0),避免复杂逻辑嵌套。


参考:NOIP

原创内容 转载请注明出处

分享给朋友:

相关文章

牛客13271题「删除K个数字的最小数」解题报告:贪心算法与栈的应用(附代码注释)

牛客13271题「删除K个数字的最小数」解题报告:贪心算法与栈的应用(附代码注释)

一、题目解读牛客13271题要求从给定的数字字符串中删除K个数字,使得剩余数字按原顺序排列后得到的最小数。题目核心在于如何在保持数字相对顺序的前提下,通过删除操作得到最优解。需注意结果字符串可能包含前...

GESP五级题巧夺大奖解题报告:贪心算法优化与代码实现(洛谷B3872)

GESP五级题巧夺大奖解题报告:贪心算法优化与代码实现(洛谷B3872)

一、题目解读2023年GESP五级题目“巧夺大奖”(洛谷B3872)是一个经典的资源分配问题。题目要求玩家在有限时间内选择多个游戏,每个游戏有截止时间和奖励值,需在截止时间前完成游戏以获得奖励。目标是...

【牛客13256题解析】贪心算法优化题目组合问题:三元组与二元组的解题思路

【牛客13256题解析】贪心算法优化题目组合问题:三元组与二元组的解题思路

一、题目解读牛客13256题要求处理一组题目难度数据,通过组合三元组(难度差≤20)或二元组(难度差≤10)来重新编排题目,计算需要补充的最小题目数量。题目本质是资源分配与优化问题,需高效组合现有题目...

2024蓝桥杯国赛B组最小字符串题解:贪心算法实战应用(洛谷P10910代码解析)

2024蓝桥杯国赛B组最小字符串题解:贪心算法实战应用(洛谷P10910代码解析)

一、题目解读题目要求给定一个长度为N的字符串S和M个待插入字符,通过将这些字符全部插入S中,构造出字典序最小的新字符串。这是典型的字符串构造问题,考察选手对贪心算法的理解和应用能力。二、解题思路采用贪...

2020年NOIP提高组“排水系统”题解(洛谷P7113):拓扑排序与分数分配的图论算法

2020年NOIP提高组“排水系统”题解(洛谷P7113):拓扑排序与分数分配的图论算法

一、题目解读2020年NOIP提高组“排水系统”(洛谷P7113)是一道典型的图论问题,要求解决流量分配问题。题目中给定一个有向图,节点表示排水点,边表示管道连接,每个节点有出度(排水方向)。需计算每...

力扣LCR074题区间合并算法解析:贪心排序与区间重叠处理

力扣LCR074题区间合并算法解析:贪心排序与区间重叠处理

一、题目解读力扣LCR074题要求对给定的二维区间数组(每个区间由起始点和终止点构成)进行合并,将重叠的区间合并为更宽的区间,最终输出不重叠的合并结果。例如,输入[[1,3],[2,6],[8,10]...

发表评论

访客

看不清,换一张

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