Pagini recente » Cod sursa (job #446610) | Borderou de evaluare (job #157060) | Borderou de evaluare (job #1767701) | Cod sursa (job #347017) | Cod sursa (job #711991)
Cod sursa(job #711991)
#include <cstring>
#include <fstream>
using namespace std;
char A[506];
int N, maxP[502][502][26];
int main()
{
ifstream fin("palm.in");
ofstream fout("palm.out");
fin >> A;
N = strlen(A);
for (int i = 1; i <= N; ++i)
for (int j = 0; j <= A[i - 1] - 'a'; ++j)
maxP[i][i][j] = 1;
for (int i = 2; i <= N; ++i) // marimea
for (int j = 1; j <= N - i + 1; ++j)
{
for (int k = 0; k <= 26; ++k)
maxP[j][j + i - 1][k] = max(maxP[j][j + i - 2][k], maxP[j + 1][j + i - 1][k]);
if (A[j - 1] == A[j + i - 2])
for (int k = 0; k <= A[j - 1] - 'a'; ++k)
{
if (i > 2)
maxP[j][j + i - 1][k] = max(maxP[j][j + i - 1][k], maxP[j + 1][j + i - 2][A[j - 1] - 'a'] + 2);
else
maxP[j][j + i - 1][k] = max(maxP[j][j + i - 1][k], 2);
}
}
fout << maxP[1][N][0];
fin.close();
fout.close();
}