2 aa abb
1 2
#include<stdio.h> #include<string.h> const int inf=20; int dp[1<<17],len,flag[1<<17]; char str[20]; bool judge(int sta){ char s[20]; int k=0 , l , r; for(int i=0; (1<<i)<=sta; i++) if((1<<i)&sta) s[k++]=str[i]; if(k==0)return 0; if(k==1)return 1; if(k&1){ l=k/2-1; r=l+2; } else{ l=k/2-1; r=l+1; } while(r<k&&s[l]==s[r])l--,r++; if(r<k)return 0; else return 1; } void dfs(int sta){ if(dp[sta]!=inf) return ; for(int s=sta-1;s>0; s=(s-1)&sta){ if(!flag[s^sta])continue; dfs(s); if(dp[sta]>dp[s]+1) dp[sta]=dp[s]+1; } if(judge(sta)) if(dp[sta]>1) dp[sta]=1; } int main() { int T; scanf("%d",&T); while(T--){ scanf("%s",str); len=strlen(str); for(int i=(1<<len)-1; i>0; i--){ dp[i]=inf; flag[i]=judge(i); } dp[0]=0;flag[0]=0; dfs((1<<len)-1); printf("%d\n",dp[(1<<len)-1]); } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/u010372095/article/details/46765031