10617 - Again Palindrome

来源:互联网 发布:php 匿名函数 use 编辑:程序博客网 时间:2024/05/17 22:13
描述:if(v[x]!=v[y]) sum[x][y]=dp(x,y-1)+dp(x+1,y)-dp(x+1,y-1);如果不相等,那么需要计算的就是字符串从[x,y]之间的,所以从[x,y-1]与[x+1,y]多计算了[x+1,y-1]这一段,需要减去。 if(str[x]==str[y]) dp(x,y)=dp(x,y-1)+dp(x+1,y)+1;如果相等,那么计算的除了[x,y]这段区间外,还存在着其中间字符串的数值,并且还有可能为空,所以需要加上[x+1,y-1]+1这些才可以#include <cstdio>#include <cstring>char v[65];long long sum[65][65];long long dp(int x,int y){    if(sum[x][y]!=-1) return sum[x][y];    if(x==y) return (sum[x][y]=1);    if(y<x) return (sum[x][y]=0);    if(v[x]==v[y]) return (sum[x][y]=dp(x,y-1)+dp(x+1,y)+1);    else return (sum[x][y]=dp(x,y-1)+dp(x+1,y)-dp(x+1,y-1));}int main(){   // freopen("a.txt","r",stdin);    int n,len;    scanf("%d",&n);    while(n--)    {        scanf("%s",v);        len=strlen(v);        memset(sum,-1,sizeof(sum));        printf("%lld\n",dp(0,len-1));    }    return 0;}