【NOIP2018Day1T1】【洛谷P5019】铺设道路

问题描述

输入格式

输出格式

样例输入

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 } 

 

posted @ 2020-08-07 22:40  SAKURA12  阅读(136)  评论(0编辑  收藏  举报