zoukankan      html  css  js  c++  java
  • hihoCoser(#1149 : 回文字符序列)

    时间限制:2000ms
    单点时限:1000ms
    内存限制:256MB

    描述

    给定字符串,求它的回文子序列个数。回文子序列反转字符顺序后仍然与原序列相同。例如字符串aba中,回文子序列为"a", "a", "aa", "b", "aba",共5个。内容相同位置不同的子序列算不同的子序列。

    输入

    第一行一个整数T,表示数据组数。之后是T组数据,每组数据为一行字符串。

    输出

    对于每组数据输出一行,格式为"Case #X: Y",X代表数据编号(从1开始),Y为答案。答案对100007取模。

    数据范围

    1 ≤ T ≤ 30

    小数据

    字符串长度 ≤ 25

    大数据

    字符串长度 ≤ 1000

    样例输入
    5
    aba
    abcbaddabcba
    12111112351121
    ccccccc
    fdadfa
    
    样例输出
    Case #1: 5
    Case #2: 277
    Case #3: 1333
    Case #4: 127
    Case #5: 17
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    const int MOD=100007;
    char buf[1005];
    int dp[1005][1005];
    int main()
    {
        int T;
        scanf("%d",&T);
        int cas=1;
        while(T--)
        {
            memset(dp,0,sizeof(dp));
            scanf("%s",buf);
            int len=strlen(buf);
            for(int j=0;j<len;j++)
            {
                dp[j][j]=1;
                for(int i=j-1;i>=0;i--)
                {
                    dp[i][j]=(dp[i+1][j]+dp[i][j-1]-dp[i+1][j-1]+MOD)%MOD;
                    if(buf[i]==buf[j])
                        dp[i][j]=(dp[i][j]+dp[i+1][j-1]+1)%MOD;
                }
            }    
            printf("Case #%d: %d
    ",cas++,dp[0][len-1]);
        }
        
        return 0;
    }
  • 相关阅读:
    20151224--
    20151223--联系人项目
    20151222--Ajax三级无刷新
    20151221--三级有刷新联动
    20151220--导航前四问已解答
    递归
    Request和Response详解
    无刷新三级联动查询
    20151219--导航自己制作的一部分
    151030
  • 原文地址:https://www.cnblogs.com/program-ccc/p/5218246.html
Copyright © 2011-2022 走看看