zoukankan      html  css  js  c++  java
  • uva 11584

    题目链接

    一个长度1000的字符串最少划分为几个回文字符串

    -----------------------------------------------------------------------------------------------------------------

    想复杂了。

    首先N2的时间预处理一下,从i开始长度为len的字符串是否为回文串。

    dist(i) = MIN(dist(i),dist(j)+1) 如果 j-i 为一个回文串

    #include <set>
    #include <map>
    #include <stack>
    #include <queue>
    #include <cmath>
    #include <vector>
    #include <string>
    #include <cstdio>
    #include <cstring>
    #include <cstdlib>
    #include <iostream>
    #include <algorithm>
    
    #define MAX(a,b) ((a)>=(b)?(a):(b))
    #define MIN(a,b) ((a)<=(b)?(a):(b))
    #define OO 0x0fffffff
    using namespace std;
    typedef long long LL;
    const int N = 1024;
    bool dp[N][N];
    int minDist[N];
    char str[N];
    int main(){
        int n; for(cin>>n;n--;){
           scanf("%s",str); int length = strlen(str);
    
           for(int i=0;i<length;i++) minDist[i] = i+1;
    
           memset(dp,false,sizeof(dp));
           for(int len=0;len<2;len++) for(int i=0;i<length;i++) {
                dp[len][i]=true;
           }
           for(int len=2;len<=length;len++){
               for(int i=0;i<length;i++){
                   if(len+i>length) break;
                   dp[len][i] = (str[i]==str[i+len-1])&&(dp[len-2][i+1]);
               }
           }
           for(int i=1;i<length;i++){
              for(int j=0;j<=i;j++){
                 if(dp[i-j+1][j]) minDist[i] = MIN(minDist[i],j?(minDist[j-1]+1):1);
              }
           }
           printf("%d
    ",minDist[length-1]);
        }
        return 0;
    }
    
    /*
    3
    racecar
    fastcar
    aaadbccb
    */
  • 相关阅读:
    php 获取机器名
    php缓存参数祥解
    ajax参数祥解
    php 正则匹配返回字符串
    TP5验证规则使用
    J
    j
    virtualBox 桥接网卡 未指定
    Spring Cloud Alibaba基础教程:Nacos配置的加载规则详解
    Spring Cloud Alibaba基础教程:使用Nacos作为配置中心
  • 原文地址:https://www.cnblogs.com/redips-l/p/7668366.html
Copyright © 2011-2022 走看看