• HDU 1513 Palindrome


    题目就是给一个字符串问最少插入多少个字符能让原字符串变为回文字符串。

    算法:

    用原串的长度减去原串与翻转后的串的最大公共字串的长度,就是所求答案。

     1 //#define LOCAL
     2 #include <iostream>
     3 #include <cstring>
     4 #include <algorithm>
     5 #include <cstring>
     6 using namespace std;
     7 
     8 const int maxn = 5000 + 5;
     9 char s1[maxn], s2[maxn];
    10 int dp[2][maxn];
    11 
    12 void Reverse(char str[], int len)
    13 {
    14     int i, t;
    15     for(i = 0; i < len/2; ++i)
    16     {
    17         t = str[i];
    18         str[i] = str[len - 1 - i];
    19         str[len - 1 - i] = t;
    20     }
    21 }
    22 
    23 int main(void)
    24 {
    25     #ifdef LOCAL
    26         freopen("1513in.txt", "r", stdin);
    27     #endif
    28     int len;
    29     while(scanf("%d", &len) == 1)
    30     {
    31         scanf("%s", s1);
    32         memcpy(s2, s1, sizeof(s1));
    33         Reverse(s2, len);
    34         int i, j;
    35         memset(dp, 0, sizeof(dp));
    36         int cur = 1,ans;
    37         for(i = 1; i <= len; ++i)
    38         {
    39             for(j = 1; j <= len; ++j)
    40             {
    41                 if(s1[i-1] == s2[j-1])
    42                     dp[cur][j] = dp[1-cur][j-1] + 1;
    43                 else
    44                     dp[cur][j] = max(dp[1-cur][j], dp[cur][j-1]);
    45             }
    46             cur = 1 - cur;
    47         }
    48         ans = len - dp[len&1][len];
    49         printf("%d
    ", ans);
    50     }
    51     return 0;
    52 }
    代码君
  • 相关阅读:
    opacity兼容性以及存在问题处理
    删除节点方法要注意的区别
    java基础-常见面试题(一)
    第04次作业-树
    第03次作业-栈和队列
    第02次作业-线性表
    Data_Structure-绪论作业
    C语言第二次实验报告
    C语言第一实验报告
    mysql 查询优化
  • 原文地址:https://www.cnblogs.com/AOQNRMGYXLMV/p/3880238.html
Copyright © 2020-2023  润新知