• UVA 11584 Partitioning by Palindromes


    Partitioning by Palindromes

    Time Limit: 1000ms
    Memory Limit: 131072KB
    This problem will be judged on UVA. Original ID: 11584
    64-bit integer IO format: %lld      Java class name: Main
     

    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.

    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

    3
    racecar
    fastcar
    aaadbccb
    

    Sample Output

    1
    7
    3

    解题:dp,求一个串最少的回文串数。。。。

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <cmath>
     5 #include <algorithm>
     6 #include <climits>
     7 #include <vector>
     8 #include <queue>
     9 #include <cstdlib>
    10 #include <string>
    11 #include <set>
    12 #include <stack>
    13 #define LL long long
    14 #define pii pair<int,int>
    15 #define INF 0x3f3f3f3f
    16 using namespace std;
    17 const int maxn = 1010;
    18 char str[maxn];
    19 int dp[maxn];
    20 bool check(int i,int j){
    21     for(int a = i,b = j; a < b; ++a,--b)
    22         if(str[a] != str[b]) return false;
    23     return true;
    24 }
    25 int main() {
    26     int t;
    27     scanf("%d",&t);
    28     while(t--){
    29         scanf("%s",str+1);
    30         int len = strlen(str+1);
    31         for(int i = 0; i < maxn; ++i) dp[i] = INF;
    32         dp[0] = 0;
    33         for(int i = 1; i <= len; ++i){
    34             for(int j = 1; j <= i; ++j)
    35                 if(check(j,i)) dp[i] = min(dp[i],dp[j-1]+1);
    36         }
    37         printf("%d
    ",dp[len]);
    38     }
    39     return 0;
    40 }
    View Code
  • 相关阅读:
    Executing a system tool
    arcengine帮助http://help.arcgis.com/en/sdk/10.0/arcobjects_net/conceptualhelp/index.html#/what_s_new_for_developers_at_10_/0001000002zp000000/
    Arcgis10.2中复制后粘贴图标是灰色的,无法粘贴,编辑也打开了,如何解决?
    VB.net X86设置
    elasticsearch5.5.2安装
    破解极验(geetest)验证码
    solidity代码
    2017年保荐代表人胜任能力考试辅导教材 投资银行业务
    投资银行业务过关必做1500题
    《一站到底》题库及答案
  • 原文地址:https://www.cnblogs.com/crackpotisback/p/4036684.html
Copyright © 2020-2023  润新知