Pagini recente » Cod sursa (job #2792261) | Cod sursa (job #1610230) | Cod sursa (job #2764849) | Cod sursa (job #1188456) | Cod sursa (job #1560993)
#include <fstream>
#include <string.h>
using namespace std;
const int lungime = 5005;
ifstream fin ("pali.in");
ofstream fout ("pali.out");
int sufix[lungime] , pali[lungime][lungime];
int main()
{
char s[lungime];
fin >> s;
fin.close();
int n = strlen(s);
for ( int i = 0 ; i < n ;i++)
pali[i][i] = 1;
for (int i = n - 1 ; i >= 0 ;i --)
for ( int j = i + 1 ; j < n ; j++)
if( s[i] == s[j] && (pali[i+1][j-1] || ( (i+1) ==j)))
pali[i][j] = 1 ;
sufix[n-1] = 1;
for ( int i = n -2 ; i >= 0 ; i--)
{
sufix[i] = 1 + sufix[i+1];
if(pali[i][n-1])
{
sufix[i] = 1;
}
else {
for ( int j = i; j <= n - 2 ; j ++)
{
if( pali[i][j])
{
if( 1 + sufix[j+1] <= sufix[i])
sufix[i] = 1 + sufix[j+1];
}
}
}
}
fout << sufix[0];
fout.close();
return 0;
}