zoukankan      html  css  js  c++  java
  • poj 1159 Palindrome(区间dp)

    题目链接:http://poj.org/problem?id=1159

    思路分析:对该问题的最优子结构与最长回文子序列相同。根据最长回文子序列的状态方程稍加改变就可以得到该问题动态方程。

    假设字符串为A[0, 1, ..., n],则定义状态dp[i, j]表示字符串A[i, i+1, ..., j]成为回文字符串所需要插入的最少字符数,则当A[i] == A[j+1]时,

    dp[i,j] = dp[i+1, j-1],否则dp[i, j] = Min(dp[i+1, j], dp[i, j+1]);

    代码如下: 

    #include <stdio.h>
    #include <string.h>
    
    const int MAX_N = 5000 + 10;
    short dp[MAX_N][MAX_N];
    char A[MAX_N];
    
    inline int Min(int a, int b) { return a > b ? b : a; }
    int Solve(int i, int j)
    {
        if (dp[i][j] != -1)
            return dp[i][j];
        if (i == j)
            return dp[i][j] = 0;
        else
        if (i > j)
            return dp[i][j] = 0;
        else
        if (A[i] == A[j])
            return dp[i][j] = Solve(i + 1, j - 1);
        else
            return dp[i][j] = 1 + Min(Solve(i + 1, j), Solve(i, j - 1));
    }
    
    int main()
    {
        int n, ans;
    
        while(scanf("%d %s", &n, A) != EOF)
        {
            memset(dp, -1, sizeof(dp));
            ans = Solve(0, n - 1);
            printf("%d
    ", ans);
        }
        return 0;
    }
  • 相关阅读:
    EasyUI
    EasyUI
    EasyUI
    django MTV架构下的网站开发步骤
    Centos7下安装python3
    python 线程间事件通知
    hadoop MapReduce
    hadoop文件配置
    DataFrame 数据去重
    用selenium获取cookies
  • 原文地址:https://www.cnblogs.com/tallisHe/p/4018188.html
Copyright © 2011-2022 走看看