小美定义一个 01 串的权值为:每次操作选择一位取反,使得相邻字符都不相等的最小操作次数。 例如,”10001″的权值是 1,因为只需要修改一次:对第三个字符取反即可。 现在小美拿到了一个 01 串,她希望你求出所有非空连续子串的权值之和,你能帮帮她吗?

区块链毕设网qklbishe.com为您提供问题的解答

小美定义一个 01 串的权值为:每次操作选择一位取反,使得相邻字符都不相等的最小操作次数。
例如,”10001″的权值是 1,因为只需要修改一次:对第三个字符取反即可。
现在小美拿到了一个 01 串,她希望你求出所有非空连续子串的权值之和,你能帮帮她吗?

有问题,暂时不知bug
#include <iostream>
#include <vector>
using namespace std;
 
intmain() {
    string s;
    intsum=0;
    cin>>s;
    vector<vector<int>> dp(s.size()+1,vector<int>(s.size(),0));
    for(inti=1;i<s.size();i++){
        if(s[i-1]==s[i]){
            dp[2][i-1]=1;
        }
    }
    for(inti=3;i<=s.size();i++){
        for(intj=0;j<s.size()-i+1;j++){
            if(s[j+i-2]==s[j+i-1]&&s[j+i-3]!=s[j+i-1]){
                dp[i][j]=dp[i-1][j]+1;
            }
            elseif(i>=4&&s[j+i-2]==s[j+i-1]&&s[j+i-3]==s[j+i-1]&&s[j+i-4]==s[j+i-1]){
                dp[i][j]=dp[i-1][j]+1;
            }
            else{
                dp[i][j]=dp[i-1][j];
            }
        }
    }
    for(inti=2;i<s.size()+1;i++){
        for(intj=0;j<s.size();j++){
            sum+=dp[i][j];
        }
    }
    cout<<sum<<endl;
}

13:52

以上就是关于问题小美定义一个 01 串的权值为:每次操作选择一位取反,使得相邻字符都不相等的最小操作次数。
例如,”10001″的权值是 1,因为只需要修改一次:对第三个字符取反即可。
现在小美拿到了一个 01 串,她希望你求出所有非空连续子串的权值之和,你能帮帮她吗?的答案

欢迎关注区块链毕设网-
专业区块链毕业设计成品源码,定制。

区块链NFT链游项目方科学家脚本开发培训

从业7年-专注一级市场


微信:btc9767
TELEGRAM :https://t.me/btcok9

具体资料介绍

web3的一级市场千万收益的逻辑


进群点我



qklbishe.com区块链毕设代做网专注|以太坊fabric-计算机|java|毕业设计|代做平台-javagopython毕设 » 小美定义一个 01 串的权值为:每次操作选择一位取反,使得相邻字符都不相等的最小操作次数。 例如,”10001″的权值是 1,因为只需要修改一次:对第三个字符取反即可。 现在小美拿到了一个 01 串,她希望你求出所有非空连续子串的权值之和,你能帮帮她吗?