Pagini recente » Cod sursa (job #2054593) | Cod sursa (job #2215274) | Cod sursa (job #1771021) | Cod sursa (job #1848566) | Cod sursa (job #1661817)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("palm.in");
ofstream out("palm.out");
char s[503];
int m[503][503];
int p[503][503];
int mC[26][503];
int ln;
void afis() {
for(int i = 0; i < ln; i++) {
for(int j = 0; j < ln; j++)
cout << m[i][j] << " ";
cout << '\n';
}
cout << '\n';
for(int i = 0; i < ln; i++) {
for(int j = 0; j < ln; j++)
cout << p[i][j] << " ";
cout << '\n';
}
}
int main() {
in.getline(s, 503);
for(int i = 0; s[i]; i++) {
//m[i][i] = 1;
ln++;
}
for(char a = 'a'; a <= 'z'; a++) {
for(int i = 0; i < ln; i++) {
if(s[i] == a)
mC[a][i] = i;
else
mC[a][i] = mC[a][i-1];
}
}
for(char a = 'z'; a >= 'a'; a--) {
for(int i = ln-1; i >= 0; i--) {
for(int j = i; j < ln; j++) {
if(i == j && s[i] == a)
m[i][j] = 1;
else if(i != j && mC[a][j] > i) {
m[i][j] = max(m[i][j], max(m[i+1][j], m[i][j-1]));
if(s[i] == a) {
m[i][j] = max(m[i][j], m[i+1][ mC[a][j]-1 ]+2);
}
}
}
}
}
out << m[0][ln-1];
return 0;
}