From Smelly Owl, 10 Months ago, written in Plain Text.
Embed
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. long recurse(int l, int d, int c, int prejsni, long****memo)
  5. {
  6.     if(l<0)
  7.     {
  8.         return 0;
  9.     }    
  10.     if(d<0)
  11.     {
  12.         return 0;
  13.     }  
  14.     if(c<0)
  15.     {
  16.         return 0;
  17.     }
  18.     //printf("%d %d %d %d %d\n", l, d, c, prejsni, memo[l][d][c][prejsni]);
  19.    
  20.     if(memo[l][d][c][prejsni]!=0)
  21.     {
  22.         return memo[l][d][c][prejsni];
  23.     }
  24.    
  25.     if(l==0&&d==0&&c==0)
  26.     {
  27.         memo[l][d][c][prejsni]=1;
  28.         return memo[l][d][c][prejsni];
  29.     }
  30.     if(prejsni==0)
  31.     {
  32.         //lahko das karkoli
  33.         memo[l][d][c][prejsni]=recurse(l-1,d,c,1,memo)+recurse(l,d-1,c,2,memo)+recurse(l,d,c-1,0,memo);
  34.         return memo[l][d][c][prejsni];
  35.     }
  36.     if(prejsni==1)
  37.     {
  38.         memo[l][d][c][prejsni]=recurse(l-1,d,c,1,memo)+recurse(l,d,c-1,0,memo);
  39.         return memo[l][d][c][prejsni];
  40.     }
  41.     if(prejsni==2)
  42.     {
  43.         memo[l][d][c][prejsni]=recurse(l,d-1,c,2,memo)+recurse(l,d,c-1,0,memo);
  44.         return memo[l][d][c][prejsni];
  45.     }
  46.     return 0;
  47. }
  48.  
  49. int main()
  50. {
  51.     int l;
  52.     int d;
  53.     int c;
  54.     scanf("%d %d %d", &l, &d, &c);  
  55.     long**** memo=(long****)malloc((l+1) * sizeof(long***));
  56.    
  57.     for(int i=0;i<l+1;i++)
  58.     {
  59.         memo[i]=(long***) malloc((d+1) * sizeof(long **));
  60.         for(int j=0;j < d+1;j++)
  61.         {
  62.             memo[i][j]=(long**) malloc((c+1)* sizeof(long*));
  63.             for(int k=0;k<c+1;k++)
  64.             {
  65.                 memo[i][j][k]=(long*)calloc(3,sizeof(long));
  66.             }
  67.         }
  68.     }
  69.    
  70.    
  71.     long a=recurse(l, d, c, 0, memo);
  72.     printf("%ld", a);
  73.    
  74.    
  75.     return 0;
  76. }