#P1562. 翻转(reverse)

翻转(reverse)

题目描述

小 C 有一个长度为 nn01SS

小 C 定义一次操作是选择串 SS 的一个后缀将其 01 翻转(0 变成 11 变成 0)。

小 C 想要知道最少需要几次操作可以使得串 SS 单调不降(即不存在 1i<jn1\le i\lt j\le n,满足 Si=1S_i=1Sj=0S_j=0)。

输入格式

输入的第一行包含一个整数 nn

接下来一行包含长度为 nn01 串,表示串 SS

输出格式

输出共一行,包含一个整数,表示最小操作次数。

样例输入 #1

3
101

样例输出 #1

2

样例输入 #2

7
0101010

样例输出 #2

5

数据范围

样例 1 解释

第一次操作:对整个串进行翻转,串 SS 变为 010
第二次操作:翻转后缀 [3,3][3,3],串 SS 变为 011
可以证明不存在操作次数更小的解,当然可能存在其他操作次数为 22 的操作方案。

  • 对于 30%30\% 的数据,保证 n20n\le 20
  • 对于 60%60\% 的数据,保证 n100n\le 100
  • 对于 100%100\% 的数据,保证 1n1051\le n\le 10^5