Loading

CF1861D

废话:#

VP 时 T3 思路不清晰,写了很久,然后这题没时间做了,赛后五分钟 AC 了(还好不是正赛,不然我会气死的)。

所以做题前思路一定要清晰且严谨!

思路:#

观察这个问题,发现如果 lr 不是单调的,那么完全没必要一起乘。

那么本题中的操作将会一整段一整段的进行,我们肯定会让段数尽可能小,于是就可以 dp 了。

fi,0/1 表示当前这一段上升/下降段数的最小数量,因为我们并不需要特别关注段之间的大小关系(因为可以自己调整相对关系嘛,但是是有细节的,具体后面会讲),所以转移是简单的,需要分三种情况讨论,具体如下:

1.当 ai=ai1 时,无论如何 ii1 都不可能分在一段,所以

fi,0=min(fi1,0,fi1,1)+1

fi,1=fi1,1+1

为什么 fi1,0 不能转移到 fi,1?因为前面并没有将数变成负数,但是当前这一段变成了负数,那不就不能单调递增了吗?所以所有的 fi,1 都不能由 fi1,0 转移。

2.当 ai<ai1

fi,0=min(fi1,0,fi1,1)+1

fi,1=fi1,1

应该不难理解,当 ai>ai1 时同理,那答案是什么呢?

我们发现如果 n 处于一个单调递增的段时,这个段是没必要乘的,所以答案要减 1,但是当 n 处于一个单调递减的段时,显然必须要乘,所以不能减,那么最终答案等于 min(fn,01,fn,1)

code

作者:lalaouye

出处:https://www.cnblogs.com/lalaouyehome/p/17806432.html

版权:本作品采用「114514」许可协议进行许可。

posted @   lalaouye  阅读(13)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示