Cod sursa(job #19042)

Utilizator stef2nStefan Istrate stef2n Data 18 februarie 2007 18:14:48
Problema Culori Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include <stdio.h>

#define infile "culori.in"
#define outfile "culori.out"
#define NMAX 520
#define MOD 9901

FILE *fin,*fout;
int n,euler[NMAX];
int A[NMAX][NMAX];

void citire()
  {
   int i;
   fin=fopen(infile,"r");
   fscanf(fin,"%d",&n);
   for(i=0;i<2*n-1;i++)
      fscanf(fin,"%d",&euler[i]);
   fclose(fin);
  }

int count(short int li, short int ls)
  {
   if(A[li][ls]!=-1)
     return A[li][ls];
   if(li==ls)
     {
      A[li][ls]=1;
      return A[li][ls];
     }
   if(li>ls)
     return 0;
   if(euler[li]!=euler[ls])
     {
      A[li][ls]=0;
      return 0;
     }
   A[li][ls]=count(li+1,ls-1);
   short int i;
   for(i=li+2;i<=ls-2;i++)
      if(euler[i]==euler[li])
        A[li][ls]=(A[li][ls]+count(li+1,i-1)*count(i,ls))%MOD;
   return A[li][ls];
  }


int main()
{
citire();
for(int i=0;i<=2*n-1;i++)
   for(int j=0;j<=2*n-1;j++)
      A[i][j]=-1;
fout=fopen(outfile,"w");
fprintf(fout,"%d\n",count(0,2*n-2));
fclose(fout);
return 0;
}