【codeup22562】最长回文子串(dp基础题)

题目:http://codeup.cn/problem.php?cid=100000629&pid=0

解题思路:


dp[i][j]=1表示s[i]到s[j]所表示的子串是回文串,否则为0

边界:

\\dp[i][i]=1\\ dp[i][i+1]=(s[i]==s[i+1])?1:0

状态转移方程:

\dpi{120} \fn_jvn $$dp[i][j]=\left\{ \begin{array}{c} dp[i+1][j-1],s[i]==s[j] \\ 0, s[i]!=s[j]\end{array}\right. $$

本题中用到库函数,isalpha,isdigit,且输入中除了空格和标点符号外的字符还可能有数字!!

详情参考代码

ac代码:


#include 
#include 
#define maxn 5005
#define inf 2147483648
using namespace std;
typedef long long ll;
int dp[maxn][maxn];
int main()
{
    //freopen("/Users/zhangkanqi/Desktop/11.txt","r",stdin);
    memset(dp,0,sizeof(dp));
    int pos[maxn];
    string a,b;
    getline(cin,a);
    int len1=a.size(),j=0;
    for(int i=0;ians)
                {
                    ans=L;
                    k=i;
                }
            }
        }
    }
    for(int i=pos[k];i<=pos[k+ans-1];i++)
        printf("%c",a[i]);
    return 0;
}

 

你可能感兴趣的:(动态规划dp)