Cod sursa(job #636239)

Utilizator PetcuIoanPetcu Ioan Vlad PetcuIoan Data 19 noiembrie 2011 18:00:02
Problema PalM Scor 20
Compilator cpp Status done
Runda .com 2011 Marime 0.88 kb
#include<stdio.h>
#include<assert.h>
#include<string.h>
#include<algorithm>
using namespace std;

char a[501];
int n,sol,d[501][501][30];

void read()
{
    assert(freopen("palm.in","r",stdin)!=NULL);
    gets(a);
    n=strlen(a);
}

void solve()
{
    int i,j,k;
    for(i=0;i<n;++i)
        for(j=0;j<26;++j)
            if(a[i]-'a'>=j)
                d[i][i][j]=1;
    for(i=0;i<n;++i)
        for(j=1;j<n-i;++j)
            for(k=0;k<26;++k)
            {
                d[i][i+j][k]=max(d[i][i+j][k],max(d[i+1][j+i][k],d[i][j+i-1][k]));
                if(a[i]==a[j] && a[i]-'a'<=k)
                    d[i][i+j][a[i]-'a']=max(d[i][i+j][a[i]-'a'],d[i+1][i+j-1][k]+2);
            }
    for(i=0;i<26;++i)
        sol=max(sol,d[1][n-1][i]);
}

void write()
{
    assert(freopen("palm.out","w",stdout)!=NULL);
    printf("%d",sol);
}

int main()
{
    read();
    solve();
    write();
    return 0;
}