#152. 不公平的游戏

不公平的游戏

不公平的游戏

题目背景

你拥有一枚硬币。每次投掷时,它恰好有一半概率向上,一半概率向下。

现在你已经预测出了接下来 nn 个时刻内这枚硬币的所有结果。你希望从中选择一段长度不超过 mm 的连续时间进行游戏,使得你最后能获得的净收益最大。

你可以假定你和朋友都拥有无限的资产。

题目描述

游戏规则如下:

  • 初始赌注为 11
  • 每次投掷硬币,如果结果为 U,表示你赢了,你会获得当前赌注,然后赌注重置为 11
  • 如果结果为 D,表示你输了,你会失去当前赌注,然后下一次赌注变为当前赌注的 22 倍。

你已经知道长度为 nn 的字符串 ss,其中:

  • U 表示该时刻硬币向上,你会赢;
  • D 表示该时刻硬币向下,你会输。

你可以选择 ss 中一段长度不超过 mm 的连续子串进行游戏,也可以选择长度为 00 的空子串。

请你求出,在最优选择下,你能获得的最大净收益。

输入格式

第一行输入两个整数 n,mn,m

第二行输入一个长度为 nn 的字符串 ss,仅包含字符 UD

输出格式

输出一个整数,表示可以获得的最大净收益。

样例输入 1

4 3
DDUU

样例输出 1

2

样例输入 2

5 5
UDDUU

样例输出 2

3

样例解释

样例 1。选择最后两个时刻 UU 进行游戏,每次都赢得 11,总净收益为 22
样例 2。选择 55 个时刻进行游戏,过程 +1+1,1-1,2-2,+4+4,+1+1总净收益为 33

数据范围

对于所有测试点,保证:

  • 1n1061\le n\le 10^6
  • 0mn0\le m\le n
  • ss 的长度为 nn
  • ss 仅包含 UD

子任务

子任务 分值 附加约束
11 88 n30n \le 30
22 77 n1000n \le 1000,且保证不会出现超过 3030 个连续的 D
33 1515 n1000n \le 1000
44 3030 n=m106n=m\le 10^6
55 4040 mn106m\le n\le 10^6