zoukankan      html  css  js  c++  java
  • P1435 回文子串(最长公共子序列)

    题目背景

    IOI2000第一题

    题目描述

    回文词是一种对称的字符串。任意给定一个字符串,通过插入若干字符,都可以变成回文词。此题的任务是,求出将给定字符串变成回文词所需要插入的最少字符数。

    比如 “Ab3bd”插入2个字符后可以变成回文词“dAb3bAd”或“Adb3bdA”,但是插入少于2个的字符无法变成回文词。

    注:此问题区分大小写

    输入格式

    一个字符串(0<strlen<=1000)

    输出格式

    有且只有一个整数,即最少插入字符数

    题解:

    答案就是这个串和它的倒置串的最长公共子序列的长度和这个串的长度做差。

    最长公共子序列的状态转移方程要熟练。

    #include<bits/stdc++.h>
    using namespace std;
    const int maxn=5005;
    string s;
    int dp[maxn][maxn];//表示第1个字符串到i位,第2个字符串到j位的最长公共子序列 
    int main () {
        cin>>s;
        string t=s;
        reverse(t.begin(),t.end());
        int len=s.length();
        for (int i=1;i<=len;i++) {
            for (int j=1;j<=len;j++) {
                if (s[i-1]==t[j-1])
                    dp[i][j]=max(dp[i][j],dp[i-1][j-1]+1);
                else
                    dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
            }
        } 
        printf("%d
    ",len-dp[len][len]);
    }
  • 相关阅读:
    Zookeeper中Watcher监听实现增删改
    Zookeeper
    pyspider爬豆瓣电影实例
    纵表与横表转换(实用)
    完善爬取糗百的段子
    为自己的爬虫更换代理和HTML头部
    我的第一个爬虫(爬取糗百的段子)
    django创建blog
    python-study-23
    python-study-22
  • 原文地址:https://www.cnblogs.com/zhanglichen/p/13454885.html
Copyright © 2011-2022 走看看