Help me in solving SUMTRIAN problem

My issue

used memorization recursive approch

My code

#include <bits/stdc++.h>
using namespace std;
int recursion(int i,int j,vector<vector<int>> triangle,vector<vector<int>> dp){
    if(i==triangle.size()-1) return triangle[i][j];
    if(dp[i][j]!=-1)  return dp[i][j];
    int d= triangle[i][j]+recursion(i+1,j,triangle,dp);
    int rd= triangle[i][j]+recursion(i+1,j+1,triangle,dp);
    return dp[i][j]=max(d,rd);
}
int dynamic(int n,vector<vector<int>> &triangle){
    vector<vector<int>> dp(n,vector<int>(n,-1));
    return recursion(0,0,triangle,dp);
    
}
int main() {
	// your code goes here
	int t,n;
	cin>>t;
	while(t--){
	    cin>>n;
	    vector<vector<int>> tri;
	    for(int i=0;i<n;i++){
	        for(int j=i;j<=i;j++){
	            cin>>tri[i][j];
	        }
	    }
	    cout<<dynamic(n,tri);
	    
}
}

Learning course: Dynamic programming
Problem Link: Sums in a Triangle Practice Problem in Dynamic programming - CodeChef

@yogita_701
plzz refer my c++ code solution for better understanding

#include <bits/stdc++.h>
using namespace std;

int main() {
	// your code goes here
	int t;
	cin>>t;
	while(t--)
	{
	    int n;
	    cin>>n;
	    vector<vector<int>> v;
	    for(int i=1;i<=n;i++)
	    {
	        vector<int> v1;
	        for(int j=0;j<i;j++)
	        {
	            int k;
	            cin>>k;
	            v1.push_back(k);
	        }
	        
	        v.push_back(v1);
	    }
	    int ans=v[0][0];
	    for(int i=1;i<n;i++)
	    {
	        for(int j=0;j<v[i].size();j++)
	        {
	            if(j==0)
	            v[i][j]+=v[i-1][j];
	            else if(j==v[i].size()-1)
	            v[i][j]+=v[i-1][j-1];
	            else
	            v[i][j]+=max(v[i-1][j],v[i-1][j-1]);
	            ans=max(ans,v[i][j]);
	        }
	    }
	    cout<<ans<<endl;
	}
}