Pagini recente » Cod sursa (job #2947270) | Cod sursa (job #718367) | Cod sursa (job #2927622) | Cod sursa (job #555393) | Cod sursa (job #2550660)
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin("palm.in");
ofstream fout("palm.out");
int n, i, j, d[503][503];
char s[503], lit;
int main(){
fin>>s;
n = strlen(s);
for(lit='z';lit>='a';lit--){
/// la fiecare pas, incerc sa maresc palindroamele deja obtinute adaugand litera lit
/// unele nu au fost inca obtinute (cele de tipul lit sau lit x lit)
int ok = 0;
for(i=0;i<n;i++)
if(s[i] == lit)
d[i][i] = 1, ok = 1;
if(ok == 0)
continue;
for(int len=2;len<=n;len++)
for(i=0;i+len-1<n;i++){
j = i+len-1;
d[i][j] = max(d[i][j], max(d[i+1][j], d[i][j-1]));
if(s[i] == s[j] && s[i] == lit)
d[i][j] = max(d[i][j], d[i+1][j-1] + 2);
}
/// acum, in d[i][j] am lungimea celui mai lung palindrom dintre i si j cu litere maxim egale cu lit
}
fout<<d[0][n-1];
return 0;
}