zoukankan      html  css  js  c++  java
  • CF1550B

    给你一个01串,要求每次删除连续的0或者1,求把所有字符全部删除的最少操作次数

    设串(str = s_1s_2s_3...s_n)由n个块组成,其中(s_i)为0串或1串,满足(s_i)(s_{i - 1}), (s_{i + 1})不同,那么能够获得最少操作次数的删除方式为每次删除第二个块,这样每次删除后块数减少2

    n为偶数时,次数为(n - 2) / 2 + 2, n为奇数时,次数为(n - 1) / 2 + 1,都等价于(lfloor n/2 floor + 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();
    }
    
  • 相关阅读:
    sed命令
    python常用库
    python标准库
    从 Python 打包到 CLI 工具
    pip
    python包自我理解
    docker常用命令
    chattr命令
    xmss
    live2d-widget.js
  • 原文地址:https://www.cnblogs.com/tomori/p/15399248.html
Copyright © 2011-2022 走看看