Cod sursa(job #2550660)

Utilizator maria15Maria Dinca maria15 Data 18 februarie 2020 22:34:41
Problema PalM Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.01 kb
#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;
}