Cod sursa(job #1560993)

Utilizator Debuger3Numarul 1 Debuger3 Data 3 ianuarie 2016 16:05:58
Problema Pascal Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#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;
}