Cod sursa(job #1240057)

Utilizator tudormaximTudor Maxim tudormaxim Data 10 octombrie 2014 13:05:22
Problema PalM Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <iostream>
#include <cstdio>
#include <string>
#define nmax 505
using namespace std;
string s;
int i,j,n,k,a[nmax][nmax][27],sir[nmax];
int main(){
    freopen("palm.in", "r", stdin);
    freopen("palm.out", "w", stdout);
    getline(cin,s);
     n=s.size();
    for (i=1; i<=n; i++)
        sir[i]=int(s[i-1])-96;
    for (i=1; i<=n; i++)
        for (k=sir[i]; k; k--) a[i][i][k]=1;
    for (i=1; i<n; ++i){
        if (sir[i]==sir[i+1])
            for (k=sir[i]; k; k--) a[i][i+1][k]=2;
        else
            for (k=max(sir[i],sir[i+1]); k; k--) a[i][i+1][k]=1;
    }
    for (int L=3; L<=n; L++)
        for (i=1; i<=n-L+1; i++){
            int p=i+L-1;
            for (k=26; k; k--){
                if (k==sir[i]&&k==sir[p])
                    a[i][p][k]=a[i+1][p-1][k]+2;
                else
                    a[i][p][k]=max(a[i+1][p-1][k],max(a[i][p-1][k],a[i+1][p][k]));
            }
            for (k=25; k; k--) a[i][p][k]=max(a[i][p][k],a[i][p][k+1]);
        }
    printf("%d",a[1][n][1]);
    return 0;
}