Pagini recente » Cod sursa (job #1447435) | Cod sursa (job #3272947) | Cod sursa (job #236369) | Cod sursa (job #1462817) | Cod sursa (job #2537350)
#include <bits/stdc++.h>
#define DIMN 510
using namespace std;
int v[DIMN] , close_l[DIMN][30] , close_r[DIMN][30] , last[30] , dp[DIMN][DIMN];
int main()
{
FILE *fin = fopen ("palm.in","r");
FILE *fout = fopen ("palm.out","w");
int n , i ,j , len , sol = 0, c;
char ch;
n = 0;
ch = fgetc(fin);
while ('a' <= ch && ch <='z'){
v[++n] = ch - 'a';
ch = fgetc(fin);
}
for (i = n ; i ; i--){
for (c = 0 ; c <= 'z' - 'a' ; c++){
if (last[c] == 0)
close_r[i][c] = n + 1;
else close_r[i][c] = last[c];
}
last[v[i]] = i;
}
memset (last , 0 , sizeof(last));
for (i = 1 ; i<=n ; i++){
for (c = 0 ; c <= 'z' - 'a' ; c++){
if (last[c] == 0)
close_l[i][c] = 0;
else close_l[i][c] = last[c];
}
last[v[i]] = i;
}
for (i = 1; i <= n ; i++){
dp[i][i] = 1; /// lmax
if (i != n && v[i] == v[i+1])
dp[i][i+1] = 2;
}
for (len = 1; len <= n ; len++){
for (i = 1; i + len - 1 <= n ; i++){
for (c = 0 ; c <= v[i] ; c++){
if (close_l[i][c] != 0 && close_r[i + len-1][c] != -1){
dp[close_l[i][c]][close_r[i + len-1][c]] = max(dp[close_l[i][c]][close_r[i + len-1][c]] , 2 + dp[i][i + len - 1]);
}
}
}
}
sol = 0;
for (i=1;i<=n;i++){
for (j=1;j<=n;j++)
sol = max(sol , dp[i][j]);
}
fprintf (fout,"%d",sol);
return 0;
}