fork(1) download
  1. #include <iostream>
  2. #include <cstring>
  3. using namespace std;
  4.  
  5. char s[1001];
  6. int length;
  7. int ans[1000][1000];
  8.  
  9. void initialize(){
  10. memset(ans,0,sizeof(ans));
  11. for(int i = 0; i < length-1; i++){
  12. if(s[i] == s[i+1]){
  13. ans[i][i+1] = 2;
  14. }
  15. }
  16.  
  17. for(int i = 0; i < length-2; i++){
  18. int val = (s[i] == s[i+1]) + (s[i+1] == s[i+2]) + (s[i] == s[i+2]);
  19. if( val == 3){
  20. ans[i][i+2] = 2;
  21. }
  22. else if(val == 1){
  23. ans[i][i+2] = 1;
  24. }
  25. }
  26. }
  27.  
  28. void solve(){
  29. for(int i = 0; i < length-3; i++){
  30. ans[i][i+3] = ans[i][i+1] + ans[i+2][i+3];
  31. }
  32. for(int len = 5; len <= length; len++){
  33. for(int i = 0; i <= length-len; i++){
  34. int j = i + len-1;
  35. ans[i][j] = max(max(ans[i][i+1]+ans[i+2][j],ans[i][i+2]+ans[i+3][j]),max(ans[i][j-2]+ans[j-1][j],ans[i][j-3]+ans[j-2][j]));
  36. }
  37. }
  38. }
  39.  
  40. int main(){
  41. int t;
  42. cin >> t;
  43. while(t--){
  44. cin >> s;
  45. length = strlen(s);
  46. initialize();
  47. solve();
  48. cout << ans[0][length-1] << endl;
  49. }
  50. }
  51.  
Success #stdin #stdout 0.02s 6632KB
stdin
17
123123123
7777777
33334
33433
334433
343434
234432
545455445544554444455555544
1233232322233223332223
123123121232232223232334321
332322232322
2222
231
2222
223
22
3121
stdout
0
6
3
3
6
2
2
22
13
7
8
4
0
4
1
2
0