首页 > 其他分享 >CF1861D

CF1861D

时间:2023-11-02 22:00:28浏览次数:30  
标签:所以 整段 min CF1861D 思路 单调

废话:

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

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

思路:

观察这个问题,发现如果 \(l\) 到 \(r\) 不是单调的,那么完全没必要一起乘。

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

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

1.当 \(a_i=a_i-1\) 时,无论如何 \(i\) 和 \(i-1\) 都不可能分在一段,所以

\[f_{i,0}=\min(f_{i-1,0},f_{i-1,1})+1 \]

\[f_{i,1}=f_{i-1,1}+1 \]

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

2.当 \(a_i<a_{i-1}\) 时

\[f_{i,0}=\min(f_{i-1,0},f_{i-1,1})+1 \]

\[f_{i,1}=f_{i-1,1} \]

应该不难理解,当 \(a_i>a_{i-1}\) 时同理,那答案是什么呢?

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

code

标签:所以,整段,min,CF1861D,思路,单调
From: https://www.cnblogs.com/lalaouyehome/p/17806432.html

相关文章