• 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 }
    代码君
  • 相关阅读:
    贪心策略---不重叠的区间个数
    贪心策略---分配饼干
    双指针---最长子序列
    双指针---回文字符串
    双指针---反转字符串中的元音字符
    双指针---两数平方和
    双指针---有序数组的TWO SUM
    排序---小结
    排序---桶排序
    变量的解构赋值
  • 原文地址:https://www.cnblogs.com/AOQNRMGYXLMV/p/3880238.html
Copyright © 2020-2023  润新知