题意
题意:给出一个长度为n 的01字符串s 与常量a ,b。你需要删除若干次连续子字符串使字符串为空,每删除一次长度为len的字符串你将获得a ∗ len + b 个点数,求能获得的最大点数
思路:因为最终要删除的长度必然是n,所以最终点数与a没有关系,只需要判断b的正负来进行操作。
如果b为正数,那么我们要最大化操作次数使点数最大,即每次删除一个字符
如果b为负数,那么我们要最小化操作次数使点数最大,可以先选择连续次数小的删除,之后剩下的就只有0或1,只需要进行一次删除操作。
思路
最终是要把所有字符都删掉,与a无关,只和b的正负有关,如果b>=0 一个一个删,如果b<0,则删除最不连续的,删除连续数最小的,依次操作
AC代码
#include <math.h>
#include <stdio.h>
#include <string.h>
int T;
int main()
{
scanf("%d", &T);
while (T--)
{
int n, a, b, sum = 0;
char s[100];
scanf("%d%d%d", &n, &a, &b);
scanf("%s", s);
sum = n * a;
if (b >= 0)
sum = sum + n * b;
else
{
int x = 1;
for (int i = 1; i < n; i++)
if (s[i] != s[i - 1])
x++;
sum = sum + (x / 2 + 1) * b;
}
printf("%d\n", sum);
}
return 0;
}