CF771D Bear and Company

题目描述

熊 Limak 正在为一项编程竞赛准备题目。当然,在题面中提及赞助商的名字是不专业的。Limak 十分认真,他打算修改一些单词。为了保证题目依然可读,他会尽量少地修改每个单词。 Limak 有一个由大写英文字母组成的字符串 $s$。在一次操作中,他可以交换字符串中相邻的两个字母。例如,他可以将字符串 “ABBC” 通过一次操作变成 “BABC” 或 “ABCB”。 Limak 希望将字符串变成一个不包含子串 “VK” 的字符串(即不能出现字母 ‘V’ 紧跟 ‘K’ 的情况)。可以证明,对于任意初始字符串 $s$,总是有可能达到这个目标。 Limak 最少需要进行多少次操作?

输入格式

输入的第一行包含一个整数 $n$($1 \leq n \leq 75$)——字符串的长度。 第二行包含一个长度为 $n$ 的仅由大写英文字母组成的字符串 $s$。

输出格式

输出一个整数,表示 Limak 至少需要多少次操作,才能得到一个不包含子串 “VK” 的字符串。

说明/提示

在第一个样例中,初始字符串为 “VKVK”。最少需要 $3$ 次操作。一种最优的移动方案如下: 1. 交换最后两个字母,字符串变为 “VKKV”。 2. 交换前两个字母,字符串变为 “KVKV”。 3. 交换第二和第三个字母,字符串变为 “KKVV”。此时字符串中没有子串 “VK”。 在第二个样例中,有两种最优的操作方案。一种是 “BVVKV” $→$ “VBVKV” $→$ “VVBKV”,另一种是 “BVVKV” $→$ “BVKVV” $→$ “BKVVV”。 在第五个样例中,不需要任何交换操作。 由 ChatGPT 5 翻译