CF1550B
给你一个01串,要求每次删除连续的0或者1,求把所有字符全部删除的最少操作次数
设串str=s1s2s3...sn由n个块组成,其中si为0串或1串,满足si和si−1, si+1不同,那么能够获得最少操作次数的删除方式为每次删除第二个块,这样每次删除后块数减少2
n为偶数时,次数为(n - 2) / 2 + 2, n为奇数时,次数为(n - 1) / 2 + 1,都等价于⌊n/2⌋+1
#include<iostream>
#include<string>
using namespace std;
const int N = 110;
int t, n, a, b;
string s;
int q[N];
void solve(){
cin >> n >> a >> b >> s;
int cnt = 1;
for(int i = 1; i < s.size(); i ++)
if(s[i] != s[i - 1]) cnt ++;
cout << a * n + max(n * b, (cnt / 2 + 1) * b) << endl;
}
int main(){
cin >> t;
while(t --) solve();
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步