问题描述
输入格式
输出格式
样例输入
6
4 3 2 5 3 5
样例输出
9
提示
数据范围
题解
用最短时间填平道路上所有的坑。。。
显然坑是从下往上填的,但是其实这样不好想算法,我们不妨倒过来,从上往下填
为了时间最短,每一次一定选最长的区间填坑
设ans表示填完所有坑的最短时间
对于第i个坑(i>1),如果di<di-1,那么填第i-1个坑的时候已经顺便把第i个坑填满了,所以就不用管第i个坑了
如果di>di-1,那么填完第i-1个坑后第i个坑还没填满,先不管后面的坑怎么填,把第i个坑填满,还需要di-di-1天(每一天都选择以第i个坑为端点的最长的区域),即ans加上di-di-1
对于第1个坑,由于一定要填满,ans初始值为d1
1 #include <cstdio> 2 int n; 3 long long d[100005],ans; 4 int main() 5 { 6 int i; 7 scanf("%d",&n); 8 for (i=1;i<=n;i++) 9 scanf("%lld",&d[i]); 10 ans=d[1]; 11 for (i=2;i<=n;i++) 12 if (d[i]>d[i-1]) 13 ans+=(d[i]-d[i-1]); 14 printf("%lld",ans); 15 return 0; 16 }