• NYOJ 37 回文字符串


    回文字符串

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


    解题:很狠狠狠经典的dp题目啊。。。。叫什么来着?最长公共子序列。。。。。长度-最长公共子序列就是我们要的结果啊。。。。

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <cstdlib>
     5 #include <vector>
     6 #include <climits>
     7 #include <algorithm>
     8 #include <cmath>
     9 #define LL long long
    10 using namespace std;
    11 char a[1100],b[1100];
    12 int dp[2][1100];
    13 int main(){
    14     int ks,i,len,j;
    15     scanf("%d",&ks);
    16     while(ks--){
    17         scanf("%s",a);
    18         len = strlen(a);
    19         for(i = 0; i < len; i++)
    20             b[len-i-1] = a[i];
    21         b[len] = '';
    22         memset(dp,0,sizeof(dp));
    23         for(i = 1; i <= len; i++){
    24             for(j = 1; j <= len; j++){
    25                 if(a[i-1] == b[j-1]){
    26                     dp[i%2][j] = dp[(i-1)%2][j-1]+1;
    27                 }else dp[i%2][j] = max(dp[(i-1)%2][j],dp[i%2][j-1]);
    28             }
    29         }
    30         printf("%d
    ",len-dp[(i-1)%2][j-1]);
    31     }
    32     return 0;
    33 }
    View Code
  • 相关阅读:
    python设置中文编码
    python中的tuple 元组
    python 日期的格式化
    python 中json的使用
    python之连接数据库
    flask之前后端交互
    flask之render_template
    Charles的https抓包方法及原理/下载ssl/http证书
    稳定的python国内镜像库
    Jmeter(五)Jmeter接口测试和压力测试
  • 原文地址:https://www.cnblogs.com/crackpotisback/p/3847333.html
Copyright © 2020-2023  润新知