Cod sursa(job #59566)

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

#define MOD 9901
#define MOD2 98029801

using namespace std;

unsigned short s[512][512], 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;
}