本题本质是贪心算法的应用场景,核心在于将道路填平操作转化为对高度差的处理。通过分析相邻区域的高度关系,发现最优策略的关键规律:每次操作本质是在消除高度差。最终转化为计算相邻区域高度差之和的数学问题。
cpp1#include <iostream> 2using namespace std; 3 4int main() { 5 // 读取道路长度和深度数组 6 int n; 7 cin >> n; 8 int a[n]; 9 for (int i = 0; i < n; i++) { 10 cin >> a[i]; 11 } 12 13 long long ans = a[0]; // 初始化天数为第一个区域的深度 14 // 遍历后续区域,累加上升高度差 15 for (int i = 1; i < n; i++) { 16 if (a[i] > a[i - 1]) { 17 ans += a[i] - a[i - 1]; // O(1)操作,累计高度差 18 } 19 } 20 cout << ans; 21 return 0; 22}
代码解释:
n:道路区域数量(1≤n≤100000)a[]:存储每个区域下陷深度的数组ans = a[0]:第一个区域必须单独操作long long 防整数溢出(极端情况总和>2e9)python1def main(): 2 import sys 3 data = sys.stdin.read().split() 4 n = int(data[0]) # 道路长度 5 a = list(map(int, data[1:1+n])) # 区域深度列表 6 7 ans = a[0] # 初始化天数为首区域深度 8 # 遍历计算高度差 9 for i in range(1, n): 10 if a[i] > a[i-1]: 11 ans += a[i] - a[i-1] # 累加上升高度差 12 13 print(ans) 14 15if __name__ == "__main__": 16 main()
代码解释:
sys.stdin.read() 批量读取提高IO效率data[1:1+n] 精准提取深度数据| 维度 | C++实现 | Python3实现 |
|---|---|---|
| 时间复杂度 | O(n) | O(n) |
| 空间复杂度 | O(n) | O(n) |
| 运行效率 | 编译执行快(≈50ms) | 解释执行慢(≈200ms) |
| 代码简洁度 | 需显式类型声明 | 语法简洁无类型约束 |
| 适用场景 | 百万级数据竞赛 | 万级数据快速开发 |
选择建议: