hdu 4632 Palindrome subsequence

系统 1663 0

http://acm.hdu.edu.cn/showproblem.php?pid=4632

简单DP

代码:

      #include<iostream>

#include<cstdio>

#include<algorithm>

#include<string>

#include<cstring>

#include<cmath>

#include<set>

#include<vector>

#include<list>

using namespace std;



typedef long long ll;

typedef pair<double,double>ppd;

const double PI = acos(-1.);

const double eps = (1e-9);

const int MOD=10007;

const int N=1005;

char s[N];

int ans[N][N];

int dp(int l,int r)

{

    if(ans[l][r]!=-1)

    return ans[l][r];//记忆化

    ans[l][r]=0;

    if(l==r)//边界

    return (ans[l][r]=1);

    if(l+1==r)//边界

    {

        ans[l][r]=2;

        if(s[l]==s[r])

        ++ans[l][r];

        return ans[l][r];

    }

    if(s[l]==s[r])//以l和r 为左右端点的情况 其中的1表示的是单独的l和r也是一个回文

    ans[l][r]+=dp(l+1,r-1)+1;

    ans[l][r]+=(dp(l+1,r)+dp(l,r-1)-dp(l+1,r-1));//把多加的减掉

    ans[l][r]%=MOD;

    if(ans[l][r]<0)

    ans[l][r]+=MOD;

    return ans[l][r];

}

int main()

{

    //freopen("data.in","r",stdin);

    int T;

    scanf("%d",&T);

    for(int c=1;c<=T;++c)

    {

        scanf("%s",s);

        memset(ans,-1,sizeof(ans));

        printf("Case %d: %d\n",c,dp(0,strlen(s)-1));

    }

    return 0;

}


    

 

hdu 4632 Palindrome subsequence


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论