• POJ-1159 Palindrome---变成回文串的最小代价


    题目链接:

    https://cn.vjudge.net/problem/POJ-1159

    题目大意:

    题意很明确,给你一个字符串,可在任意位置添加字符,最少再添加几个字符,可以使这个字符串成为回文字符串。

    解题思路:

    设原序列S的逆序列为S'

    最少需要补充的字母数 = 原序列S的长度 —  S和S'的最长公共子序列长度

    采用滚动数组节省空间

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<algorithm>
     4 #include<iostream>
     5 using namespace std;
     6 const int maxn = 1e4 + 10;
     7 char s1[maxn], s2[maxn];
     8 int dp[2][maxn], n;
     9 int main()
    10 {
    11     scanf("%d", &n);
    12     scanf("%s", s1);
    13     for(int i = 0; i < n; i++)
    14         s2[i] = s1[n - 1 - i];
    15     for(int i = 0; i < n; i++)
    16     {
    17         for(int j = 0; j < n; j++)
    18         {
    19             int now = (i + 1) & 1;
    20             if(s1[i] == s2[j])
    21                 dp[now][j + 1] = dp[!now][j] + 1;
    22             else dp[now][j + 1] = max(dp[!now][j + 1], dp[now][j]);
    23         }
    24     }
    25     cout<<n - dp[n&1][n]<<endl;
    26     return 0;
    27 }
  • 相关阅读:
    MySQL数据库分页
    Spring MVC
    Spring框架
    Java学习计划(转载)
    开发用户注册模块
    Ajax技术
    Jodd Email 发送邮件
    DOM技术
    MD5加密
    final关键字的使用
  • 原文地址:https://www.cnblogs.com/fzl194/p/9009796.html
Copyright © 2020-2023  润新知