【正经题解】铺设道路
2024-03-15 17:45:48
发布于:浙江
72阅读
0回复
0点赞
主要思路是使用贪心算法,从左到右遍历每块区域,如果当前区域的深度小于下一个区域的深度,就填充当前区域到下一个区域的深度差。这样可以确保在最短时间内将整段道路的下陷深度都变为 。
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin >> n;
// 用数组 a 存储每块区域下陷的深度
int a[n + 5];
for (int i = 1; i <= n; i++) {
cin >> a[i];
}
int sum = a[1]; // 初始化总天数为第一块区域的深度
for (int i = 1; i < n; i++) {
// 如果当前区域的深度小于下一个区域的深度,累加两者之差到总天数
if (a[i] < a[i + 1]) {
sum += a[i + 1] - a[i];
}
}
cout << sum; // 输出总天数
return 0;
}
全部评论 1
代码降维
此题不用数组的本质是降维(1 维到 0 维),和背包DP 2 维降 1 维是一个意思降维的情况:
对于一个 n 维状态空间的问题,若计算当前状态时,仅依赖于状态空间中维度差为q(0≤q≤n)的历史状态,则可以将原本的n维存储结构,压缩为 n−q 维的存储结构。例如本题只需要循环用输入的相邻两个数判断,没必要存数组!
2026-07-22 来自 河南
0









有帮助,赞一个