1. 程式人生 > >NOIP2018 DAY1T1 鋪設道路(水題)

NOIP2018 DAY1T1 鋪設道路(水題)

洛谷傳送門

【題目分析】

呵呵,NOIP竟然出原題,是不是刷過積木大賽這道題的人都禁賽啊?

結論很明顯,直接找區間最小值減去即可。

不知道nlogn的演算法能不能過,反正O(n)即可。

我選擇先讀完再掃一遍,當然也可以邊讀邊記錄答案。

記dp[i]表示消除1~i需要的最小次數,如果a[i]<a[i-1],那麼可以直接在消a[i-1]的時候消完a[i],如果a[i]>a[i-1],那麼在消完a[i-1]後還剩a[i]-a[i-1],這就是要補上的,統計一下即可。

【程式碼~】

#include<bits/stdc++.h>
using namespace std;
const int MAXN=1e5+10;

int n,a[MAXN];
long long dp[MAXN];
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;++i)
      scanf("%d",&a[i]);
    for(int i=1;i<=n;++i)
    {
        dp[i]=dp[i-1];
        if(a[i]>a[i-1])
          dp[i]+=a[i]-a[i-1];
    }
    cout<<dp[n];
}