Pagini recente » Cod sursa (job #1137263) | Cod sursa (job #1386508) | Cod sursa (job #1145323) | Cod sursa (job #1218343) | Cod sursa (job #1661794)
#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;
//}
}
int P = 0;
for(int i = 2; i < ln; i++) {
for(int j = 0; j < ln-i; j++) {
if(m[j+1][i+j] >= m[j][i+j-1]) {
m[j][i+j] = m[j+1][i+j];
P = p[j+1][i+j];
} else {
m[j][i+j] = m[j][i+j-1];
P = p[j][i+j-1];
}
if(s[i+j] == s[j] && s[i+j] < s[P]) {
p[j][i+j] = i+j;
m[j][i+j] += 2;
} else {
p[j][i+j] = P;
}
}
}
out << m[0][ln-1];
return 0;
}