• uva11584 Partitioning by Palindromes


    题目大意:

    给出一个字符串,把他划分成尽量少的回文串,问最少的回文串个数

    /*
        先预处理所有回文子串
        dp[i]表示字符1~i划分成的最小回文串的个数
    */
    #include<iostream>
    #include<cstring>
    #include<cstdio>
    using namespace std;
    int t,dp[1010];
    char s[1010];
    bool p[1010][1010];
    int main(){
        //freopen("Cola.txt","r",stdin);
        scanf("%d",&t);
        while(t--){
            scanf("%s",s+1);
            int len=strlen(s+1);
            memset(p,0,sizeof(p));
            memset(dp,127/3,sizeof(dp));
            for(int i=1;i<=len;i++){
                int l=i,r=i;
                p[i][i]=1;
                while(l>1&&r<len){
                    l--;r++;
                    if(s[l]==s[r]){
                        p[l][r]=p[r][l]=1;
                        
                    }
                    else break;
                }
                l=i+1;r=i;
                while(l>1&&r<len){
                    l--;r++;
                    if(s[l]==s[r]){
                        p[l][r]=p[r][l]=1;
                    }
                    else break;
                }
            }
            dp[0]=0;dp[1]=1;
            for(int i=1;i<=len;i++){
                for(int j=0;j<i;j++){
                    if(p[j+1][i]){
                        dp[i]=min(dp[i],dp[j]+1);
                    }
                }
            }
            printf("%d
    ",dp[len]);
        }
    }
  • 相关阅读:
    我回来了.jpg
    NOIp2016 day1解题报告
    丢人笔记:黑科技——使用streambuf加速读入输出
    点分治总结
    改一下OI代码风格
    算法笔记:笛卡尔树
    复腱
    poj3348Cows 凸包板子
    线段树板子poj3468
    CH4201楼兰图腾
  • 原文地址:https://www.cnblogs.com/thmyl/p/7405768.html
Copyright © 2020-2023  润新知