Cod sursa(job #59585)

Utilizator crawlerPuni Andrei Paul crawler Data 9 mai 2007 19:06:57
Problema Culori Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include <stdio.h>
#include <bitset>

#define MOD 9901
#define MOD2 990199010

using namespace std;

unsigned short s[512][512];
short c[512];
bitset<512> ok[512];

unsigned short mem(int x, int y)
{
 if(ok[x][y])
  return s[x][y];

 ok[x][y]=1;
 int rez=0;

 if(c[x]==c[y])
  {
   rez=mem(x+1, y-1);
   int i;
   
   for(i=x+2;i<y;i+=2)
    if(c[x]==c[i])
     {
      rez+=mem(x+1,i-1)*mem(i,y);
      if(rez > MOD2)
       rez-=MOD2;
     }
  }
 s[x][y]=rez%MOD;
 return s[x][y];
}

int main()
{
 freopen("culori.in","r",stdin);
 freopen("culori.out","w",stdout);

 int i,n,j;
 
 scanf("%d", &n);
  
 n*=2;
    
 for(i=1;i<n;++i)
  for(j=0;j<=i;++j)
   ok[i][j]=1,s[i][j]=1;
            
 for(i=1;i<n;++i)
  scanf("%d", c+i);

 printf("%d\n", mem(1,n-1));
 
 return 0;
}