Cod sursa(job #637339)

Utilizator mathboyDragos-Alin Rotaru mathboy Data 20 noiembrie 2011 13:53:44
Problema PalM Scor 0
Compilator cpp Status done
Runda .com 2011 Marime 0.98 kb
#include <cstdio>
#include <cstring>
#include <string>

#define MAXN 502

using namespace std;

int N;
char s[MAXN+ 5];
int S[MAXN];
int dp[27][MAXN][MAXN];

int main() {

	freopen("palm.in", "r", stdin);
	freopen("palm.out", "w", stdout);


	gets(s + 1);
	N = strlen(s + 1);
	for(int i = 1; i <= N; i++)
		S[i] = (s[i] - 'a');

	for(int i = 1; i <= N; i++) {
		dp[S[i]][i][i] = 1;
	}
//	return 0;
	for(int i = N; i >= 1; i--) {
		for(int j = i + 1; j <= N; j++) {
			int st, dr;
			st = i; dr = j;
			if(S[st] == S[dr]) {
				int mx = 0;
				for(int k = 0; k <= S[st]; k++)
					mx = max(mx, dp[k][st + 1][dr - 1]);
				dp[S[st]][st][dr] = mx + 2;
			}
			if(S[st] != S[dr]) {
				int mxst, mxdr;
				for(int k = 0; k < 26; k++) {
					mxst = mxdr = 0;
					mxst = max(mxst, dp[k][st][dr - 1]);
					mxdr = max(mxdr, dp[k][st + 1][dr]);
					dp[k][st][dr] = max(mxdr, mxst);
				}
			}
		}
	}
	int mx = 0;
	for(int k = 0; k < 26; k++)
		mx = max(dp[k][1][N], mx);
	printf("%d\n", mx * 2 - 1);
	return 0;
}