PTA1040动态规划题解

Posted 让AI服务于我

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PTA1040动态规划题解相关的知识,希望对你有一定的参考价值。

分析:

看到好多题解都是利用dp去记录是否是回文串,其实dp可以直接记录回文串的长度,这里定义dp[i][j]是以i开头j结尾的字符串是否是回文串,不是为0,是的话记录它的长度。

#include<iostream>
using namespace std;
int dp[1001][1001]=0;
int main()

    string str;
    getline(cin,str);
    int maxans=-1;
    for(int i=str.size()-1;i>=0;i--)
        for(int j=i;j<str.size();j++)
           
            if(i==j)
                dp[i][j]=1;
            else if(str[i]==str[j])
               
                if(i==j-1)
                dp[i][j]=2;
                else if(dp[i+1][j-1]!=0)
                    dp[i][j]=dp[i+1][j-1]+2;
                else
                    dp[i][j]=0;
            
            maxans=maxans>dp[i][j]?maxans:dp[i][j];
        
    cout<<maxans;
    return 0;

以上是关于PTA1040动态规划题解的主要内容,如果未能解决你的问题,请参考以下文章

PTA1040动态规划题解

HDU1003 Max Sum 题解 动态规划 最大字段和扩展

Codevs_1040_[NOIP2001]_统计单词个数_(划分型动态规划)

动态规划 | 最长回文子串 1040

PAT1040 Longest Symmetric String (25分) 中心扩展法+动态规划

PTA乙级 (*1040 有几个PAT (25分))