Partitioning by Palindromes UVA

来源:互联网 发布:淘宝整点秒杀在哪 编辑:程序博客网 时间:2024/05/17 04:04

题目链接:点我


题意:

给你一个字符串,问最少能分成几个回文串.

思路:

动态规划,dp[i]表示 1 到 i 最少可以分成几个回文串,则dp[i] = min(dp[i], dp[j] + 1) && judge(j,i) : 表示由 j + 1 到 i 能形成回文串.

代码:

#include<cstring>#include<cstdio>#include<algorithm>#include<cmath>#include<queue>#include<iostream>using namespace std;const int INF = 1e9 + 10;int dp[1000+10];char ss[1000+10];bool judge(int l,int r){    while(l < r){        if(ss[l] != ss[r])            return false;        l++;        r--;    }return true;}int main(){    int t;    scanf("%d", &t);    while(t--){        scanf(" %s", ss+1);        int len = strlen(ss+1);        for(int  i = 1; i <= len; ++i){            dp[i] = INF;            for(int  j = 0; j < i;++j)                if(judge(j+1,i))                    dp[i] = min(dp[i], dp[j] + 1);        }printf("%d\n",dp[len]);    }return 0;}
原创粉丝点击