fork(7) download
  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4.  
  5. #define MOD 1000000007
  6.  
  7. string s;
  8. int FMem[1047];
  9. int isPalMem[1047][1047];
  10.  
  11. bool isPal(int b, int e) {
  12. if(b==e || b+1==e) return true;
  13. if(isPalMem[b][e]!=-1) return isPalMem[b][e];
  14. if(s[b]!=s[e-1]) return isPalMem[b][e]=0;
  15. return isPalMem[b][e]=isPal(b+1,e-1);
  16. }
  17.  
  18. int F(int n) {
  19. if(n==0) return 1;
  20. if(FMem[n]!=-1) return FMem[n];
  21. int res=0;
  22. for(int i=0; i<n; i++)
  23. if(isPal(i,n)) res=(res+F(i))%MOD;
  24. return FMem[n]=res%MOD;
  25. }
  26.  
  27. int main() {
  28. cin >> s;
  29. for(int i=0; i<s.length()+42; i++) FMem[i]=-1;
  30. for(int i=0; i<s.length()+42; i++)
  31. for(int j=0; j<s.length()+42; j++) isPalMem[i][j]=-1;
  32. cout << F(s.length()) << endl;
  33. return 0;
  34. }
Success #stdin #stdout 0s 7104KB
stdin
ab
stdout
1