/ WHOJ / 题库 /

最大奖励删除

最大奖励删除

题目描述

给你一个长度为 \(n\) 的字符串 \(s\),该字符串仅由字符 \(0\) 和 \(1\) 组成。

执行以下操作直到字符串为空:选择某个连续的相同字符的子串,将其从字符串中删除,剩余两部分按原顺序合并(其中任何部分都可以为空)。

例如:如果从字符串 \(111110\) 中删除子串 \(111\),则将获得字符串 \(110\)。

删除长度为 \(l\) 的子串,将获得奖励 \(a×l+b\)。

按上述操作直到字符串为空,你能获得总奖励的最大值是多少?

格式

输入格式

第一行一个正整数 \(t(1≤t≤2000)\),表示测试组数;

每组数据输入两行,第一行三个整数 \(n,a,b(1≤n≤1000;-100≤a,b≤100)\),如题意;

第二行输入一个长度为 \(n\) 的字符串 \(s\),\(s\) 由 \(0\) 和 \(1\) 组成。

输出格式

对于每个测试组输出一行一个整数,表示总奖励的最大值。

样例1

样例输入1

3
3 2 0
000
5 -2 5
11001
6 1 -4
100111

样例输出1

6
15
-2

样例解释

第一组数据:一步将 \(000\) 删除,贡献 \(2×3+0=6\)

第二组数据:一个一个删除字符,贡献 \(5×(-2×1+5)=15\)

第三组数据:先删除 \(00\),再删除 \(1111\),贡献 \((1×2-4)+(1×4-4)=-2\)

限制

时间:\(1s\) 空间:\(256M\)

对于 \(20\%\) 的数据:\(1≤t≤2000;1≤n≤100\);输入串全 \(0\),或全 \(1\)。

对于 \(50\%\) 的数据:\(1≤t≤2000;1≤n≤100\);

对于 \(100\%\) 的数据:\(1≤t≤2000;1≤n≤1000\);

来源

地址:\(zloj,J2021\)域
作者:\(jialiang2509\)