#include<cstdio> #include<cstring> #include<algorithm> #include<cstdlib> #include<iostream> #include<queue> #include<vector> #include<sstream> #include<cmath> #include<queue> #include<cctype> #include<set> #include<unordered_set> using namespace std; const int maxn = 1000 + 5; int dp[maxn]; int S[maxn][maxn]; int main() { int N; cin>>N; for(int k = 0; k < N; k++){ string s; cin>>s; int n = s.length(); fill(S[0],S[0]+maxn*maxn,0); fill(dp,dp+maxn,maxn); for(int i = 0; i < n; i++) for(int j = i; j < n; j++){ bool ok = true; int ii = i, jj = j; while(ii<jj){ if(s[ii++] != s[jj--]){ ok = false; break; } } if(ok) S[i][j] = 1; } dp[0] = 1; for(int i = 1; i < n; i++) for(int j = 0; j <= i; j++) if(S[j][i]){ if(!j) dp[i] = 1; else dp[i] = min(dp[i],dp[j-1]+1); } cout<<dp[n-1]<<endl; } return 0; }
uva 11584
猜你喜欢
转载自blog.csdn.net/a874288174/article/details/80007896
今日推荐
周排行