zoukankan      html  css  js  c++  java
  • LightOJ 1044

    A palindrome partition is the partitioning of a string such that each separate substring is a palindrome.

    For example, the string "ABACABA" could be partitioned in several different ways, such as {"A","B","A","C","A","B","A"}, {"A","BACAB","A"}, {"ABA","C","ABA"}, or {"ABACABA"}, among others.

    You are given a string s. Return the minimum possible number of substrings in a palindrome partition of s.

    Input

    Input starts with an integer T (≤ 40), denoting the number of test cases.

    Each case begins with a non-empty string s of uppercase letters with length no more than 1000.

    Output

    For each case of input you have to print the case number and the desired result.

    Sample Input

    3
    AAAA
    ABCDEFGH
    QWERTYTREWQWERT
    

    Output for Sample Input

    Case 1: 1
    Case 2: 8
    Case 3: 5
    

    题目大意就是说对于每一个一个字符串,都可以分解成若干个回文串。

    现在让你求所给字符串分解成若干回文串的最小数量。

    显然,分解成若干回文串的最大数量就是回文串的长度。

    建立dp[i]代表前i个字符分解成若干回文串的最小数量。

    那么枚举前i个字符中的j,如果使得在字符串[j,i]区间是回文串, 那么对于

    dp[i] = min(dp[i], dp[j-1] + 1);

    代码如下:

    #include<bits/stdc++.h>
    using namespace std;
     
    bool judge(int x, int y, string &str)
    {
        while(x < y)
        {
            if(str[x] != str[y])
                return false;
            x ++, y --;
        }
        return true;
    }
     
    void solve(int cases)
    {
        string str;
        cin >> str;
        vector<int> dp(str.size()+1, str.size() + 1);
        dp[0] = 0;
        for(int i=1; i<str.size()+1; ++ i)
        {
            dp[i] = i;
            for(int j=1; j<=i; ++ j)
            {
                if(judge(j-1, i-1, str))
                    dp[i] = min(dp[i], dp[j-1] + 1);
            }
        }
        cout << "Case " << cases << ": "  << dp[str.size()] << endl;
    }
     
    int main()
    {
        ios::sync_with_stdio(false);
     
        int t;
        cin >> t;
        for(int i=1; i<=t; ++ i)
            solve(i);
        return 0;
    }
    
  • 相关阅读:
    阻止JavaScript事件冒泡传递<转>
    小温谈数据库优化数据库设计篇
    名言集合
    SQL Server中获得EXEC的值<转>
    WIN2008 64位系统配置PHP的方法
    陪伴我作为程序员的9句名言<转>
    C# 的快捷键汇总(一)
    使用VB.NET开发复合控件
    C#写SQL SERVER2008存储过程
    c#图像处理入门
  • 原文地址:https://www.cnblogs.com/aiterator/p/6724701.html
Copyright © 2011-2022 走看看