Cod sursa(job #639558)

Utilizator vladtarniceruVlad Tarniceru vladtarniceru Data 23 noiembrie 2011 15:59:12
Problema PalM Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.24 kb
#include <fstream>
#include <cstring>
using namespace std;

int a[510][510][27];
char sir[514];
int main()
{
    ifstream f("palm.in");
    ofstream g("palm.out");

    f.getline(sir+1,510);
    int n=strlen(sir+1);

    int sol=0;
    for(int i=1;i<=n;++i)
    {
        for(int j=i;j<=n;++j)
        {
            int st=j-i+1,dr=j;
            if(sir[st]==sir[dr])
            {
                a[st][dr][sir[st]-'a']=max(a[st][dr][sir[st]-'a'],1+(st!=dr));
                if(i>2)
                    for(int l=sir[st]-'a';l<26;++l)
                        a[st][dr][sir[st]-'a']=max(a[st][dr][sir[st]-'a'],a[st+1][dr-1][l]+2);
            }
            if(i>2)
                for(int l=0;l<26;++l)
                    a[st][dr][l]=max(a[st][dr][l],max(a[st][dr-1][l],a[st+1][dr][l]));
        }
    }

    /*for (int i=1;i<=n;++i)
        for(int j=i;j<=n;++j)
        {
            g<<i<<' '<<j;
            g<<'\n';
            for(int l=0;l<26;++l)
                g<<a[i][j][l]<<' ';
            g<<'\n';
        }*/
    for(int i=1;i<=n;++i)
        for(int j=i;j<=n;++j)
            for(int k=0;k<26;++k)
                if(a[i][j][k]>sol) sol=a[i][j][k];

    g<<sol;

    g.close();
    return 0;
}