UVA 11584 Quick access, info and search.

來源:互聯網
上載者:User

標籤:acm   uva   

Problem H: Partitioning by Palindromes

We say a sequence of characters is a palindrome if it is the same written forwards and backwards. For example, ‘racecar‘ is a palindrome, but ‘fastcar‘ is not.

A partition of a sequence of characters is a list of one or more disjoint non-empty groups of consecutive characters whose concatenation yields the initial sequence. For example, (‘race‘, ‘car‘) is a partition of ‘racecar‘ into two groups.

Given a sequence of characters, we can always create a partition of these characters such that each group in the partition is a palindrome! Given this observation it is natural to ask: what is the minimum number of groups needed for a given string such that every group is a palindrome?

For example:

  • ‘racecar‘ is already a palindrome, therefore it can be partitioned into one group.
  • ‘fastcar‘ does not contain any non-trivial palindromes, so it must be partitioned as (‘f‘, ‘a‘, ‘s‘, ‘t‘, ‘c‘, ‘a‘, ‘r‘).
  • ‘aaadbccb‘ can be partitioned as (‘aaa‘, ‘d‘, ‘bccb‘).

Input begins with the number n of test cases. Each test case consists of a single line of between 1 and 1000 lowercase letters, with no whitespace within.

For each test case, output a line containing the minimum number of groups required to partition the input into groups of palindromes.

Sample Input
3racecarfastcaraaadbccb
Sample Output
173
Kevin Waugh
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#define maxn 1005#define INF 10e7using namespace std;char s[maxn];int dp[maxn];int len;bool is_Palindrome(int i,int j){    for(int l=i,r=j;l<=j;l++,r--)    {        if(s[l]!=s[r])            return false;    }    return true;}//dp[i]表示前i個字元所能分解最小迴文串的個數int main(){    int n;    cin>>n;    while(n--)    {        scanf("%s",s+1);        int len=strlen(s+1);        for(int i=1;i<=len;i++)            dp[i]=INF;            dp[0]=0;            for(int i=1; i<=len; i++)                for(int j=1; j<=i; j++)                if(is_Palindrome(j,i))                    dp[i]=min(dp[i],dp[j-1]+1);                cout<<dp[len]<<endl;    }    return 0;}

UVA 11584 Quick access, info and search.

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.