uva 11151 Longest Palindrome(LCS)

来源:互联网 发布:蜀国只有一个州 知乎 编辑:程序博客网 时间:2024/05/29 19:24

题目连接:11151 - Longest Palindrome


题目大意:给出一个字符串,计算这个字符串的最长回文子串, 不同的是,它的子串可以不连续。


解题思路:刚开始把这道题当成普通的回文串来做了, 用了manachar算法, 让后一直WA, 然后才发现原来子串可以不连续, 但是其实就是求当前这个字符串和其逆序的最长公共子序列。


#include <stdio.h>#include <string.h>const int N = 1005;int max(int a, int b) { return a > b ? a : b; }char a[N], b[N];int dp[N][N], len;int solve() {    memset(dp, 0, sizeof(dp));    for (int i = 1; i <= len; i++) {for (int j = 1; j <= len; j++) {    if (a[i - 1] == b[j - 1])dp[i][j] = dp[i - 1][j - 1] + 1;    elsedp[i][j] = max(dp[i - 1][j], dp[i][j - 1]);}    }    return dp[len][len];}int main() {    int cas;    scanf("%d%*c", &cas);    while (cas--) {gets(a);len = strlen(a);for (int i = 0; i < len; i++)    b[len - i - 1] = a[i];printf("%d\n", solve());    }}


原创粉丝点击