Pagini recente » Cod sursa (job #1845673) | Cod sursa (job #1281637) | Cod sursa (job #1634095) | Cod sursa (job #1689064) | Cod sursa (job #1661784)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("palm.in");
ofstream out("palm.out");
char s[503];
short m[503][503];
short p[503][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(int i = 0; i < ln-1; i++) {
if(s[i] == s[i+1]) {
m[i][i+1] = 2;
p[i][i+1] = i;
} else {
m[i][i+1] = 1;
p[i][i+1] = i;
}
}
for(int i = 2; i < ln; i++) {
for(int j = 0; j < ln-i; j++) {
m[j][i+j] = max(m[j+1][i+j], m[j][i+j-1]);
if(s[i+j] == s[j] && s[i+j] < s[p[j][i+j]]) {
p[j][i+j] = i+j;
m[j][i+j] += 2;
} else {
p[j][i+j] = p[j+1][i+j];
}
}
}
out << m[0][ln-1];
//afis();
return 0;
}