ZOJ 1168 - Function Run Fun

I can't stand the problem.
TLE many times just because of using cin/cout :(
 1  /*  Accepted 1168 C++ 00:00.21 472K  */
 2  #include  < stdio.h >
 3 
 4  int  f[ 21 ][ 21 ][ 21 ];
 5  int  w( int  a,  int  b,  int  c)
 6  {
 7       if (a  <=   0   ||  b  <=   0   ||  c  <=   0 )
 8           return   1 ;
 9      
10       if (f[a][b][c])
11           return  f[a][b][c];    
12      
13       if (a  <  b  &&  b  <  c)
14           return  f[a][b][c]  =  w(a, b, c - 1 +  w(a, b - 1 , c - 1 -  w(a, b - 1 , c);
15       return  f[a][b][c]  =  w(a - 1 , b, c)  +  w(a - 1 , b - 1 , c)  +  w(a - 1 , b, c - 1 -  w(a - 1 , b - 1 , c - 1 );
16  }
17 
18  int  main()
19  {
20       int  a, b, c;
21       while (scanf( " %d %d %d " & a,  & b,  & c)  !=  EOF)
22      {
23           if (a  ==   - 1   &&  b  ==   - 1   &&  c  ==   - 1 )
24               break ;
25          
26          printf( " w(%d, %d, %d) =  " , a, b, c);
27           if (a  <=   0   ||  b  <=   0   ||  c  <=   0 )
28              printf( " 1\n " );
29           else
30          {
31               if (a  >   20   ||  b  >   20   ||  c  >   20 )
32                  a  =   20 , b  =   20 , c  =   20 ;
33              printf( " %d\n " , w(a, b, c));
34          }
35      }
36      
37       return   0 ;
38  }
39 

你可能感兴趣的:(ZOJ 1168 - Function Run Fun)