Cod sursa(job #1564026)

Utilizator alexpetrescuAlexandru Petrescu alexpetrescu Data 7 ianuarie 2016 20:17:08
Problema PalM Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <cstdio>
#define MAXN 500
char s[MAXN+1];
int d[MAXN+1][MAXN+1];
int main(){
    int n, i, l;
    char ch;
    FILE *fin, *fout;
    fin=fopen("palm.in", "r");
    fout=fopen("palm.out", "w");
    ch=fgetc(fin);
    n=0;
    while(ch!='\n'){
        s[++n]=ch;
        ch=fgetc(fin);
    }
    for(ch='z'; ch>='a'; ch--){
        for(i=1; i<=n; i++){
            d[i][i]=(s[i]>=ch);
        }
        for(i=1; i<n; i++){
            d[i][i+1]=2*((s[i]==s[i+1])&&(s[i]>=ch));
        }
        for(l=2; l<n; l++){
            for(i=1; i+l<=n; i++){
                if(d[i][i+l]<d[i][i+l-1]){
                    d[i][i+l]=d[i][i+l-1];
                }
                if(d[i][i+l]<d[i+1][i+l]){
                    d[i][i+l]=d[i+1][i+l];
                }
                if((s[i]==s[i+l])&&(s[i]==ch)&&(d[i][i+l]<d[i+1][i+l-1]+2)){
                    d[i][i+l]=d[i+1][i+l-1]+2;
                }
            }
        }
    }
    fprintf(fout, "%d\n", d[1][n]);
    fclose(fin);
    fclose(fout);
    return 0;
}