zoukankan      html  css  js  c++  java
  • [NYOJ 37] 回文字符串

    回文字符串

    时间限制:3000 ms  |  内存限制:65535 KB
    难度:4
     
    描述
    所谓回文字符串,就是一个字符串,从左到右读和从右到左读是完全一样的,比如"aba"。当然,我们给你的问题不会再简单到判断一个字符串是不是回文字符串。现在要求你,给你一个字符串,可在任意位置添加字符,最少再添加几个字符,可以使这个字符串成为回文字符串。
    输入
    第一行给出整数N(0<N<100)
    接下来的N行,每行一个字符串,每个字符串长度不超过1000.
    输出
    每行输出所需添加的最少字符数

    样例输入
    1
    Ab3bd

    样例输出
    2
    区间DP模板题、、
    #include <iostream>
    #include <cstdio>
    #include <cstring>
    using namespace std;
    #define INF 0x7ffffff
    #define N 1010
    
    int n;
    char s[N];
    int dp[N][N];         //dp[i][j]表示把区间i、j凑成回文需要添加的最少字符数
    
    int main()
    {
        int T,i,j;
        scanf("%d",&T);
        getchar();
        while(T--)
        {
            gets(s+1);
            n=strlen(s+1);
            for(i=1;i<=n;i++)         //特别注意初始化
            {
                for(j=1;j<=n;j++)
                {
                    if(i>=j)
                        dp[i][j]=0;
                    else
                        dp[i][j]=INF;
                }
            }
            for(i=n;i>=1;i--)
            {
                for(j=i+1;j<=n;j++)
                {
                    dp[i][j]=min(dp[i][j],dp[i+1][j]+1);
                    dp[i][j]=min(dp[i][j],dp[i][j-1]+1);
                    if(s[i]==s[j]) dp[i][j]=min(dp[i][j],dp[i+1][j-1]);
                }
            }
            cout<<dp[1][n]<<endl;
        }
        return 0;
    }
    趁着还有梦想、将AC进行到底~~~by 452181625
  • 相关阅读:
    Git 基础笔记整理1
    学习开源中国客户端
    IOS项目中的细节处理,如更改状态栏等等
    网络编程
    当FileWriter没有flush的时候,不写入文件
    批量移动文件
    批量重命名文件
    替换一个文件内的某个字符
    遍历map和删除map中的一个entry
    ArrayList的遍历-转载
  • 原文地址:https://www.cnblogs.com/hate13/p/4119655.html
Copyright © 2011-2022 走看看