当前位置:首页 > 提高组 > 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

原创内容 转载请注明出处

分享给朋友:

相关文章

洛谷P1007士兵过桥问题详解 C++贪心算法实现与优化

洛谷P1007士兵过桥问题详解 C++贪心算法实现与优化

题目解读这道题目描述了一座长度为L的桥上有n个士兵,每个士兵每秒可以向左或向右移动1个单位。当士兵到达桥的端点(0或L+1)时离开桥。要求计算所有士兵离开桥的最小时和最大时间。解题思路最小时计算:每个...

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

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

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

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

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

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

【NOIP提高组2003】神经网络(洛谷P1038)题解:拓扑排序与动态规划的应用

【NOIP提高组2003】神经网络(洛谷P1038)题解:拓扑排序与动态规划的应用

一、题目解读2003年NOIP提高组中的“神经网络”题目(洛谷P1038)要求处理一个由神经元和带权有向边构成的网络。题目给定神经元的初始状态、阈值,以及神经元之间的连接关系,需要模拟信号传递过程,并...

力扣1643题:第K小字典序路径(附C++代码与解题思路)

力扣1643题:第K小字典序路径(附C++代码与解题思路)

一、题目解读本题要求生成从原点(0, 0)到目标坐标(destination[0], destination[1])的路径中,字典序第K小的路径。路径仅由向下字符'V'(代表垂直移动)...

洛谷P3817题解:基于贪心算法的糖果分配优化策略

洛谷P3817题解:基于贪心算法的糖果分配优化策略

一、题目解读洛谷P3817题目要求处理n个盒子中的糖果分配问题:给定每个盒子的糖果数a[i]及限制值x,需通过吃掉部分糖果,确保任意相邻盒子(a[i-1] + a[i])的总和不超过x。输出最小需吃掉...

发表评论

访客

看不清,换一张

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