Cod sursa(job #637193)

Utilizator tzipleatudTudor Tiplea tzipleatud Data 20 noiembrie 2011 12:53:00
Problema Minesweeper Scor 0
Compilator cpp Status done
Runda .com 2011 Marime 1.42 kb
#include <fstream>
#include <cstring>
using namespace std;

ifstream f("palm.in");
ofstream g("palm.out");

string s;
int i,n,v[501],sol=0,l[501][501],maxi,j;
int b[501][501];


int main () {
    f >> s;
    n=s.size();
    for (i=1;i<=n;i++) v[i]=int(s[i-1])-int('a')+1;
    for (i=1;i<=n;i++) {l[i][i]=1;b[i][i]=v[i];}
    for (j=1;j<=n;j++) {
        for (i=1;i<=n-j;i++) {
            if (v[i]==v[i+j] && (v[i+j]<=v[i+j-1]&&(v[i+j]<=b[i+1][i+j-1]))) {
                l[i][i+j]=l[i+1][i+j-1]+2;
                b[i][i+j]=b[i][i];
            }
            else {
                if (v[i]==v[i+j]) {
                    l[i][i+j]=l[i+1][i+j-1];
                    b[i][i+j]=b[i+1][i+j-1];
                    if (l[i][i+j]==1) {l[i][i+j]=2;b[i][i+j]=b[i][i];}
                }
                if (l[i+1][i+j]>l[i][i+j]) {
                    l[i][i+j]=l[i+1][i+j];
                    b[i][i+j]=b[i+1][i+j];
                }
                if (l[i][i+j-1]>l[i][i+j]) {
                    l[i][i+j]=l[i][i+j-1];
                    b[i][i+j]=b[i][i+j-1];
                }
            }
            maxi=max(maxi,l[i][i+j]);
        }
    }
    for (i=1;i<=n;i++)
        for (j=1;j<=n;j++)
            maxi=max(maxi,l[i][j]);
    /*for (i=1;i<=n;i++) {
        for (j=1;j<=n;j++) g << b[i][j] << ' ';
        g << '\n';
    }*/
    g << maxi << '\n';
    f.close();g.close();
    return 0;
}