Cod sursa(job #643224)

Utilizator cdascaluDascalu Cristian cdascalu Data 3 decembrie 2011 10:46:06
Problema PalM Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.24 kb
#include<stdio.h>
#include<string.h>
#define Nmax 501
#define SIG 26
#define MOD 97
char s[Nmax];
int a[Nmax][Nmax][SIG];
int maxim(int a,int b)
{
    if(a>=b)return a;
    return b;
}
int main()
{
    FILE*f = fopen("palm.in","r");
    fgets(s,Nmax,f);
    fclose(f);
    int i,j,k,size=strlen(s),pos,max;
    if(s[size-1]=='\n')
        --size;
    for(k=0;k<size;++k)
    {
        for(i=0;i<size-k;++i)
        {
            j = i+k;
            a[i][j][int(s[i])%MOD] = 1;
            a[i][j][int(s[j])%MOD] = 1;
            if(s[i]==s[j] && i!=j)
            {
                a[i][j][int(s[i])%MOD] = 2;
                if(k>=2)
                {
                    for(pos = int(s[i])%MOD;pos<SIG;++pos)
                        a[i][j][int(s[i])%MOD] = maxim(a[i][j][int(s[i])%MOD] , a[i+1][j-1][pos]+2);
                }
            }
            if(k>=2)
                for(pos = 0;pos<SIG;++pos)
                    a[i][j][pos] = maxim(a[i][j][pos], maxim(  a[i+1][j-1][pos],  maxim(a[i][j-1][pos],a[i+1][j][pos])  ) );
        }
    }

    max = 0;
    for(i=0;i<SIG;++i)
        max = maxim(a[0][size-1][i],max);

    FILE*g = fopen("palm.out","w");
    fprintf(g,"%d",max);
    fclose(g);
    return 0;
}