Pagini recente » Cod sursa (job #2604175) | Cod sursa (job #2348585) | Cod sursa (job #1943038) | Cod sursa (job #2773134) | Cod sursa (job #638782)
Cod sursa(job #638782)
#include<fstream>
#include<iostream>
#define dim 1001
using namespace std;
int t[dim], lis[dim], poz[dim], n;
int EstePal(int valoare, int st, int dr)
{
for (int k = dr; k >= st; k--)
if (valoare == t[k]) return k;
return -1;
}
int main()
{
int i, j, x, maxim, p, pf;
char s[dim];
ifstream fin("palm.in");
fin >> s;
fin.close();
n = strlen(s);
for (i = 1; i <= n; i++)
t[i] = s[i - 1] - 'a';
t[0] = -1;
lis[0] = 0;
poz[0] = n + 1;
for (i = 1; i <= n; i++)
{
x = t[i];
maxim = -1;
for (j = 0; j < i; j++)
if (lis[j] != -1)
{
p = EstePal(x, i, poz[j] - 1);
if (t[j] <= x && p != -1 && maxim < lis[j])
{
maxim = lis[j];
pf = p;
}
}
if (maxim == -1)
{
lis[i] = -1;
poz[i] = -1;
}
else
{
lis[i] = maxim + 1;
poz[i] = pf;
}
}
// determinare maxim
maxim = 0;
for (i = 1; i <= n; i++)
if (poz[i] == i) lis[i] = 2 * lis[i] - 1;
else lis[i] = 2 * lis[i] - 1;
for (i = 1; i <= n; i++)
if (maxim < lis[i])
maxim = lis[i];
ofstream fout("palm.out");
fout << maxim;
fout.close();
return 0;
}