
核心思想:贪心
题目描述

题意梳理
首先,有一个很长很长的地平线

一天 工程师春春发现了好多坑😨

现在,他必须填平这些坑。

每个坑都有一个深度di,
春春每天可以选择一段连续区间[L,R] ,填充这段区间中的每块区域,让其下陷深度减少1。在选择区间时,需要保证,区间内的每块区域在填充前下陷深度均不为0。
春春希望你能帮他设计一种方案,可以在最短的时间内将整段道路的下陷深度都变为0
如选择[1,6]

解法
此题有多种做法,都是基于贪心的做法。
这里只介绍一种做法。
考虑贪心,使用f[]记录当前(就是耗费多少),a[]记录以前。
若此坑深度比前一坑小或相同,则在填好d[i-1]时,可以顺便填好d[i].
否则,此坑只要填a[i]-a[i-1]次。
即
fi=ai−ai−1
看一下具体实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| #include<iostream> using namespace std; int n,a[100001],f[100001],ans; int main() { cin>>n; for(int i=1;i<=n;i++) { cin>>a[i]; f[i]=a[i]; } for(int i=1;i<=n;i++) { if(a[i]>=a[i-1]) f[i]-=a[i-1]; else f[i]=0; } for(int i=1;i<=n;i++) { ans+=f[i]; } cout<<ans; return 0; }
|
快捷下载1
快捷下载2