題目:https://www.luogu.org/problemnew/show/P1970學習
今天又學習了一個新的神仙操做;ui
標籤是DP,想了一下,沒什麼心情寫,默默打開題解——(狂喜!)spa
一位大佬(LittlePrincess)的思路簡直是顛覆腦回路!!code
根據A,B兩個條件的描述,只要求有幾個波峯波谷就行了。若是在上升忽然降低ans就++;blog
反之同理;get
注意,若是在最後的時候還在降低要把最後的一個加上;it
由於在最後還在上升時,h[n+1](=0)<h[n] 因此ans會加上;io
可是在最後還在降低時,h[n+1]<h[n],ans不會加上,因此要特判一下;class
能夠算是貪心的作法了(相對於正解DP來講);di
上代碼
#include<cstdio> using namespace std; int n,h[150000],ans=1; bool jud; int main() { scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d",&h[i]); } if(h[2]>=h[1]) jud=1; for(int i=1;i<=n;i++) { if(jud==0&&i==n) { ans++; break; } if(jud==1) { if(h[i+1]<h[i]) { ans++; jud=0; continue; } } if(jud==0) { if(h[i+1]>h[i]) { ans++; jud=1; continue; } } } printf("%d",ans); return 0; }