Cod sursa(job #1240051)

Utilizator tudormaximTudor Maxim tudormaxim Data 10 octombrie 2014 12:43:53
Problema PalM Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <iostream>
#include <cstdio>
#include <cstring>
#define nmax 505
using namespace std;
int m[nmax][nmax][30];
char s[nmax];
int main(){
    freopen("palm.in", "r", stdin);
    freopen("palm.out", "w", stdout);
    cin.getline(s,nmax);
    int lg=strlen(s);
    for(int i=lg;i;i--){
        m[i][i][s[i]-'a']=1;
        for(int k=24;k>=0;k--)
            m[i][i][k]=max(m[i][i][k],m[i][i][k+1]);
        for(int j=i+1;j<=lg;j++){
            for(int k=0;k<26;k++){
                m[i][j][k]=max(m[i][j-1][k],m[i+1][j][k]);
                if(s[i]==s[j] && s[i]-'a'==k)
                    m[i][j][k]=(m[i+1][j-1][k]+2);
            }
            for(int k=24;k>=0;k--)
                m[i][j][k]=max(m[i][j][k],m[i][j][k+1]);
        }
    }
    printf("%d\n",m[1][lg][0]);
    fclose(stdin);
    fclose(stdout);
    return 0;
}