zoukankan      html  css  js  c++  java
  • hdu 4632 动态规划

    思路:dp[i][j]表示区间(i,j)中回文串的个数,那么dp[i][j]=dp[i+1][j]+dp[i][j-1]-dp[i+1][j-1];如果str[i]==str[j],那么dp[i][j]+=dp[i+1][j-1]+1;

    #include<iostream>
    #include<cstring>
    #include<cstdio>
    #include<algorithm>
    #define Maxn 1010
    #define Mod 10007
    using namespace std;
    int dp[Maxn][Maxn];
    int main()
    {
        int t,i,j,n,Case=0;
        char str[Maxn];
        scanf("%d",&t);
        while(t--)
        {
            scanf("%s",&str);
            n=strlen(str);
            memset(dp,0,sizeof(dp));
            for(i=0;i<=n;i++)
                dp[i][i]=1;
            for(i=0;i<n;i++)
            {
                for(j=i-1;j>=0;j--)
                {
                    dp[j][i]=(dp[j+1][i]+dp[j][i-1]-dp[j+1][i-1]+Mod)%Mod;
                    if(str[j]==str[i])
                    {
                        dp[j][i]+=dp[j+1][i-1]+1;
                        dp[j][i]%=Mod;
                    }
                }
            }
            printf("Case %d: %d
    ",++Case,dp[0][n-1]%Mod);
        }
        return 0;
    }
  • 相关阅读:
    双线性过滤
    textureView
    cubemap
    selfshadow
    cbuffer padding
    异常
    Python深浅拷贝
    数据类型分类
    集合类型内置方法
    字典数据类型内置方法
  • 原文地址:https://www.cnblogs.com/wangfang20/p/3231278.html
Copyright © 2011-2022 走看看