#include <stdio.h>
#include <stdlib.h>

int **t; 

int f3 (int x, int y) {
  int r; 

  if (t[x][y] != -1)
    return t[x][y];
  if (x == 1 || y == 1) 
    r = 0;
  else 
    r = f3(x-1,y) + f3(x,y-1) + x*y;
  t[x][y] = r; 
  return r;
}

int main() {
  int n, m, i, j;

  printf("Digite n e m: ");
  scanf("%d %d", &n, &m);

  /* Alocação de memória e inicialização da matriz t */
  if ((t = malloc((n+1)*sizeof(int *))) == NULL) {
    printf("Erro na alocação de memória!\n"); 
    exit(0); 
  }
  for (i=1; i<=n; i++) {
    if ((t[i] = malloc((m+1)*sizeof(int))) == NULL) {
      printf("Erro na alocação de memória!\n"); 
      exit(0); 
    }
    for (j=1; j<=m; j++)
      t[i][j] = -1;
  }

  printf("\nf(%d,%d) = %d\n", n, m, f3(n,m));
  return 0;
}
