zoukankan      html  css  js  c++  java
  • 蓝桥杯 密码脱落 LCS

    9.

    密码脱落(后来题目说是有问题,测试用例不会有E出现)

    X星球的考古学家发现了一批古代留下来的密码。

    这些密码是由A、B、C、D 四种植物的种子串成的序列。

    仔细分析发现,这些密码串当初应该是前后对称的(也就是我们说的镜像串)。

    由于年代久远,其中许多种子脱落了,因而可能会失去镜像的特征。

    你的任务是:

    给定一个现在看到的密码串,计算一下从当初的状态,它要至少脱落多少个种子,才可能会变成现在的样子。

    输入一行,表示现在看到的密码串(长度不大于1000)

    要求输出一个正整数,表示至少脱落了多少个种子。

    例如,输入:

    ABCBA

    则程序应该输出:

    0

    再例如,输入:

    ABECDCBABC

    则程序应该输出:

    3

    资源约定:

    峰值内存消耗 < 256M

    CPU消耗 < 1000ms

    请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。

    所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。

    注意:main函数需要返回0

    注意: 只使用ANSI C/ANSI C++ 标准,不要调用依赖于编译环境或操作系统的特殊函数。

    注意: 所有依赖的函数必须明确地在源文件中 #include <xxx>, 不能通过工程设置而省略常用头文件。

    提交时,注意选择所期望的编译器类型。


    思路:

    需要找出最少的字符去除使其变成回文串,思路就是将给出的字符串反转,两个字符串求出公共最长的子序列,就是原串最长的回文子序列的长度,再用原串的长度减去LCS的

    长度即可。

    LCS详解的传送门:1.点击打开链接 


    代码:

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<cstdlib>
    #include<string>
    #include<algorithm>
    using namespace std;
    int main()
    {
        string s1,s2;
        cin>>s1;
        int len=s1.length();
        s2=s1;
        reverse(s1.begin(),s1.end());
        //二维数组解法
        int dp[len+1][len+1];
        memset(dp,0,sizeof(dp));
        for(int i=1;i<=len;i++)
        {
            for(int j=1;j<=len;j++)
            {
                if(s1[i-1]==s2[j-1])
                    dp[i][j]=dp[i-1][j-1]+1;
                else
                    dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
            }
        }
        //一维数组解法
        int dp2[len+1];
        memset(dp2,0,sizeof(dp2));
        for(int i=1;i<=len;i++)
        {
            for(int j=1;j<=len;j++)
            {
                if(s1[i-1]==s2[j-1])
                    dp2[j]=dp2[j-1]+1;
                else
                    dp2[j]=max(dp2[j-1],dp2[j]);
            }
        }
        printf("%d
    ",len-dp[len][len]);
        printf("%d
    ",len-dp2[len]);
        return 0;
    }
    


  • 相关阅读:
    对数线性模型与线性链条件随机场
    25匹马,5个跑道,每个跑道最多能有1匹马进行比赛,最少比多少次能比出前3名?前5名?
    SVM 与 LR的异同
    EM算法简易推导
    K-means算法的优缺点
    自助采样包含训练集里63.2%的样本?
    指数加权移动平均
    oracle 对于用户的相关操作
    docker 安装 maven 私有库 nexus3
    idea 自动注入@Autowired 警告 Field injection is not recommended 关闭
  • 原文地址:https://www.cnblogs.com/lemonbiscuit/p/7776012.html
Copyright © 2011-2022 走看看