zoukankan      html  css  js  c++  java
  • NYOJ37-回文字符串(dp)

    37-回文字符串


    内存限制:64MB 时间限制:3000ms 特判: No
    通过数:88 提交数:177 难度:4

    题目描述:

    所谓回文字符串,就是一个字符串,从左到右读和从右到左读是完全一样的,比如"aba"。当然,我们给你的问题不会再简单到判断一个字符串是不是回文字符串。现在要求你,给你一个字符串,可在任意位置添加字符,最少再添加几个字符,可以使这个字符串成为回文字符串。

    输入描述:

    第一行给出整数N(0<N<100)
    接下来的N行,每行一个字符串,每个字符串长度不超过1000.

    输出描述:

    每行输出所需添加的最少字符数

    样例输入:

    1
    Ab3bd

    样例输出:

    2

    解题:把字符串逆转后,长度 - 二者的最长公共子序列
    #include<stdio.h>
    #include<iostream>
    #include<algorithm>
    #include<cstring>
    #include<math.h>
    #include<string>
    #include<queue>
    #define ll long long
    #define inf 0x3f3f3f3f
    using namespace std;
    
    int t;
    string a,b;
    int dp[1005][1005];
    
    int main()
    {
        cin>>t;
        while(t--)
        {
            cin>>a;
            b="";
            int len=a.size();
            for(int i=len-1;i>=0;i--)
                b=b+a[i];
            //cout<<b<<endl;
            memset(dp,0,sizeof(dp));
    
            for(int i=0;i<len;i++)
            {
                for(int j=0;j<len;j++)
                {
                    if(a[i]==b[j])
                        dp[i+1][j+1]=dp[i][j]+1;///当i=j=0并且字符相等时,dp[1][1]中的1代表两个字符串比较的字符个数
                    else
                        dp[i+1][j+1]=max(dp[i+1][j],dp[i][j+1]);
                }
            }
           // printf("%d
    ",dp[len][len]);
            printf("%d
    ",len-dp[len][len]);
        }
    
    }
  • 相关阅读:
    简单复利计算java板
    弹出提示框的方式——java
    实验一 命令解释程序
    简单复利计算c语言实现
    操作系统
    jsp 页面和 jsp标记
    对it行业的一些看法
    又穷自动机的构造
    复利计算——结对编程2.0
    汉堡包
  • 原文地址:https://www.cnblogs.com/shoulinniao/p/10720271.html
Copyright © 2011-2022 走看看