天天看點

NYOJ 36 回文字元串

最少字元數等于字元長度減去工控子序列;

是以這題和那個求最公共子序列的題一樣,隻是dp的方向不同,這題是dp從右上角走到左下角,那個題是dp從左上角走到右下角

#include<stdio.h>
#include<string.h>
int dp[][];
int main()
{
  int T,i,j,len;
  char s[];
  scanf("%d",&T);
  while(T--)
  {
    scanf("%s",&s[]);
    len=strlen(&s[]);
    memset(dp,,sizeof(dp));
    for(i = ; i <= len; i++)
    {
      for(j = len; j >= ; j--)
      {
         if(s[i] == s[j])
            dp[i][j] = dp[i-][j+] + ;
         else
            dp[i][j] = dp[i - ][j] > dp[i][j + ] ? dp[i - ][j] : dp[i][j + ];
        }
      }
     printf("%d\n",len-dp[len][]);
     }
     return ;
 }
           

繼續閱讀