回文串最少划分数

来源:互联网 发布:吃鸡为什么不优化 编辑:程序博客网 时间:2024/06/04 20:28

这个是正向分析字符串,觉得比较好理解.
这个问题以后还要补充……

via http://blog.csdn.net/u010885899/article/details/50364183

#pragma warning(disable:4996)  #include <iostream>  #include <algorithm>  #include <cmath>  #include <vector>  #include <string>  #include <cstring>  using namespace std;int len;char s[5005];char s1[5005];int dp[5005];int v[5005][5005];void input(){    scanf("%s", s1);    len = strlen(s1);    strcpy(s + 1, s1);}void solve(){    int i, j;    for (i = 0; i <= len; i++)    {        v[i][i] = 1;    }    for (i = 1; i <= len; i++)    {        dp[i] = i;        for (j = i; j >= 1; j--)        {            if (i == j)            {                dp[i] = min(dp[i], dp[i - 1] + 1);            }            else if (i - j == 1 && s[i] == s[j])            {                v[j][i] = 1;                dp[i] = min(dp[i], dp[j-1] + 1);            }            else if (v[j + 1][i - 1]&&s[i]==s[j])            {                v[j][i] = 1;                dp[i] = min(dp[i], dp[j-1] + 1);            }        }    }    printf("%d", dp[len]);}int main(){    //freopen("i.txt", "r", stdin);    //freopen("o.txt", "w", stdout);    input();    solve();    //system("pause");    return 0;}
0 0
原创粉丝点击