UVA - 10617 Again Palindrome

来源:互联网 发布:ps软件错误16 编辑:程序博客网 时间:2024/06/07 14:59

题意:只通过删除,问可以弄成多少的回文串,跟之前的一题是相似的,对于str[i] = str[j]的情况,如果我们步删除的话dp[i][j] = dp[i+1][j-1] +1,如果删除str[i]的话,dp[i][j] += dp[i+1][j],相似的还有dp[i][j] += dp[i][j-1],除去相同的dp[i+1][j-1],

#include <iostream>#include <cstdio>#include <cstring>using namespace std;const int MAXN = 70;char str[MAXN];long long dp[MAXN][MAXN];int main(){    int t;    scanf("%d",&t);    while (t--){       scanf("%s",str);       memset(dp,0,sizeof(dp));       int len = strlen(str);       for (int i = 0; i < len; i++)           dp[i][i] = 1;               for (int i = len - 2; i >= 0; i--)           for (int j = i + 1; j < len; j++){               if (str[i] == str[j])                   dp[i][j] = dp[i+1][j-1] + 1;               dp[i][j] += dp[i+1][j] + dp[i][j-1] - dp[i+1][j-1];           }        printf("%lld\n",dp[0][len-1]);    }    return 0;}



原创粉丝点击