#define N 5
int triangle[N][N]={
{ 6,-1,-1,-1,-1},
{ 1, 2,-1,-1,-1},
{ 3, 7, 4,-1,-1},
{ 9, 4, 1, 7,-1},
{ 2, 7, 5, 9, 4}
};
int cache[N][N];
int n=0;
int path1(int x, int y){
n++;
//basis
if(x==N || y>x){return 0;}
if(cache[x][y]!=-1){return cache[x][y];}
int n1 = path1(x+1,y);
int n2 = path1(x+1,y+1);
if(n1>n2){
return cache[x][y]=triangle[x][y]+n1;
}else{
return cache[x][y]=triangle[x][y]+n2;
}
}
int main(){
for(int i=0;i<N;i++){
for(int j=0;j<N;j++){
cache[i][j]=-1;
}
}
printf("%d
",path1(0,0));
printf("Function called %d times
",n);
}