Advertisement
Guest User

Untitled

a guest
Oct 19th, 2017
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.18 KB | None | 0 0
  1. #include <fstream>
  2. #include <cstring>
  3. using namespace std;
  4.  
  5. ifstream fin("nr_pal.in");
  6. ofstream fout("nr_pal.out");
  7.  
  8. const int MaxN = 1002, Inf = 0x3f3f3f3f;
  9. char s[MaxN];
  10. int p[MaxN][MaxN], D[MaxN], p1[MaxN];
  11. int nrp;
  12. int n;
  13.  
  14. bool Pal(int i, int j);
  15. void Dyn();
  16.  
  17. int main()
  18. {
  19. fin >> (s + 1);
  20. n = strlen(s + 1);
  21. memset(D, Inf, sizeof(D));
  22. Dyn();
  23. D[1] = 1;
  24. for (int i = 1; i <= n; ++i)
  25. {
  26. if (p[1][i])
  27. {
  28. D[i] = 1;
  29. continue;
  30. }
  31.  
  32. for (int j = 1; j < i; ++j)
  33. if(p[j + 1][i] && D[j] + 1 < D[i])
  34. D[i] = D[j] + 1;
  35. }
  36.  
  37.  
  38. fout << D[n];
  39. fin.close();
  40. fout.close();
  41. return 0;
  42. }
  43.  
  44.  
  45.  
  46. void Dyn()
  47. {
  48.  
  49. for (int i = 1; i <= n; ++i)
  50. p[i][i] = true, nrp++;
  51.  
  52.  
  53. for (int i = 1; i < n; ++i)
  54. {
  55. p[i][i + 1] = s[i] == s[i + 1];
  56. if (p[i][i + 1])
  57. nrp++;
  58. }
  59.  
  60. int j;
  61. for (int d = 2; d < n; ++d)
  62. for (int i = 1; i + d <= n; ++i)
  63. {
  64. j = i + d;
  65. p[i][j] = s[i] == s[j] && p[i + 1][j - 1];
  66. if (p[i][j])
  67. nrp++;
  68.  
  69. }
  70. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement