zoukankan      html  css  js  c++  java
  • uva 10453

    题目

    题意: 给一个字符串 ,判断最少插入多少个字符 使字符串成为回文串, 并输出回文串。

    思路:先用dp判断需要个数, 再递归输出路径。

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <cmath>
     5 #include <cstdlib>
     6 #include <algorithm>
     7 #define min(a, b)((a)>(b)?(b):(a))
     8 using namespace std;
     9 
    10 const int maxn = 1100;
    11 char s[maxn];
    12 int d[maxn][maxn], len;
    13 
    14 void show(int a, int b)
    15 {
    16    if(a==b)
    17    {
    18        cout<<s[a];
    19        return;
    20    }
    21    if(a>b)
    22     return;
    23    if(s[a] == s[b])
    24    {
    25      cout<<s[a];
    26      show(a+1, b-1);
    27      cout<<s[b];
    28    }
    29    else
    30    {
    31      if(d[a+1][b] < d[a][b-1])
    32      {
    33         cout<<s[a];
    34         show(a+1, b);
    35         cout<<s[a];
    36      }
    37      else
    38      {
    39         cout<<s[b];
    40         show(a, b-1);
    41         cout<<s[b];
    42      }
    43    }
    44 }
    45 int main()
    46 {
    47     int i, k;
    48     while(cin>>s)
    49     {
    50        len = strlen(s);
    51        memset(d, 0, sizeof(d));
    52        for(i = 0; i < len-1; i++)
    53        if(s[i]!=s[i+1])
    54        d[i][i+1] = 1;
    55        for(k = 2; k <= len-1; k++)
    56        for(i = 0; i <len; i++)
    57        {
    58           if(i+k<len)
    59           {
    60             if(s[i] == s[i+k])
    61                 d[i][i+k] = d[i+1][i+k-1];
    62             else
    63                 d[i][i+k] = min(d[i+1][i+k], d[i][i+k-1]) + 1;
    64           }
    65        }
    66        cout<<d[0][len-1]<<" ";
    67        show(0, len-1);
    68        cout<<endl;
    69     }
    70     return 0;
    71 }
  • 相关阅读:
    三数之和
    盛最多水的容器
    正则表达式匹配
    最长回文子串
    寻找两个有序数组的中位数
    2、二维数组中的查找
    1、找出数组中重复的数字
    mongodb的下载地址
    提取快捷方式的图标资源问题
    一条数据引发的问题
  • 原文地址:https://www.cnblogs.com/bfshm/p/3684930.html
Copyright © 2011-2022 走看看