码迷,mamicode.com
首页 > 其他好文 > 详细

【题解】回文字

时间:2019-05-03 16:09:46      阅读:182      评论:0      收藏:0      [点我收藏+]

标签:name   sed   int   mes   ide   pac   algo   英文字母   display   

题目描述

  如果一个单词从前和从后读都是一样的,则称为回文字。如果一个单词不是回文字,则可以把它拆分成若干个回文字。编程求一个给定的字母序列,最多要分割成几部分,使每一部分都回文字。

 

输入格式

  一行,包含一个字符串。字符串由小写英文字母组成(a-z),长度不超过100。

 

输出格式

  一行,为最少的回文字个数。

 

输入样例

anaban

 

输出样例

2

 

题解

  区间dp。先判断当前子串是否是回文串,不是的话直接合并即可。

技术图片
#include <iostream> 
#include <algorithm>
#include <cstdio>
#include <cmath>
#include <string>

using namespace std;

string s;
int f[101][101];
bool flag;

int main()
{
    cin >> s;
    for(register int i = s.size() - 1; i >= 0; i--)
    {
        for(register int j = i; j < s.size(); j++)
        {
            flag = 1;
            for(register int k = i; k < i + (j - i + 1) / 2; k++)
            {
                if(s[k] != s[j - k + i])
                {
                    flag = 0;
                    break;
                }
            }
            if(flag)
            {
                f[i][j] = 1;
                continue;
            }
            f[i][j] = 0xfffff;
            for(register int k = i; k < j; k++)
            {
                f[i][j] = min(f[i][j], f[i][k] + f[k + 1][j]);
            }
        }
    }
    cout << f[0][s.size() - 1];
    return 0;
} 
参考程序

 

【题解】回文字

标签:name   sed   int   mes   ide   pac   algo   英文字母   display   

原文地址:https://www.cnblogs.com/kcn999/p/10805123.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!