NOIP 2013 花匠 神仙操作
程序员文章站
2022-06-17 08:56:20
题目:https://www.luogu.org/problemnew/show/P1970 今天又学习了一个新的神仙操作; 标签是DP,想了一下,没什么心情写,默默打开题解——(狂喜!) 一位大佬(LittlePrincess)的思路简直是颠覆脑回路!! 根据A,B两个条件的描述,只要求有几个波峰 ......
题目:https://www.luogu.org/problemnew/show/p1970
今天又学习了一个新的神仙操作;
标签是dp,想了一下,没什么心情写,默默打开题解——(狂喜!)
一位大佬(littleprincess)的思路简直是颠覆脑回路!!
根据a,b两个条件的描述,只要求有几个波峰波谷就好了。如果在上升突然下降ans就++;
反之同理;
注意,如果在最后的时候还在下降要把最后的一个加上;
因为在最后还在上升时,h[n+1](=0)<h[n] 所以ans会加上;
但是在最后还在下降时,h[n+1]<h[n],ans不会加上,所以要特判一下;
可以算是贪心的做法了(相对于正解dp来说);
上代码
#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; }