Cod sursa(job #59573)

Utilizator crawlerPuni Andrei Paul crawler Data 9 mai 2007 18:57:18
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;

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

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

 ok[x][y]=1;
 unsigned 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;
}