NOIP2018 DAY1T1 鋪設道路(水題)
阿新 • • 發佈:2018-11-11
洛谷傳送門
【題目分析】
呵呵,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]; }