Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <fstream>
- #include <cstring>
- using namespace std;
- ifstream fin("nr_pal.in");
- ofstream fout("nr_pal.out");
- const int MaxN = 1002, Inf = 0x3f3f3f3f;
- char s[MaxN];
- int p[MaxN][MaxN], D[MaxN], p1[MaxN];
- int nrp;
- int n;
- bool Pal(int i, int j);
- void Dyn();
- int main()
- {
- fin >> (s + 1);
- n = strlen(s + 1);
- memset(D, Inf, sizeof(D));
- Dyn();
- D[1] = 1;
- for (int i = 1; i <= n; ++i)
- {
- if (p[1][i])
- {
- D[i] = 1;
- continue;
- }
- for (int j = 1; j < i; ++j)
- if(p[j + 1][i] && D[j] + 1 < D[i])
- D[i] = D[j] + 1;
- }
- fout << D[n];
- fin.close();
- fout.close();
- return 0;
- }
- void Dyn()
- {
- for (int i = 1; i <= n; ++i)
- p[i][i] = true, nrp++;
- for (int i = 1; i < n; ++i)
- {
- p[i][i + 1] = s[i] == s[i + 1];
- if (p[i][i + 1])
- nrp++;
- }
- int j;
- for (int d = 2; d < n; ++d)
- for (int i = 1; i + d <= n; ++i)
- {
- j = i + d;
- p[i][j] = s[i] == s[j] && p[i + 1][j - 1];
- if (p[i][j])
- nrp++;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement