3D- tabulation DP solution
Code


# Code
```cpp []
class Solution {
    typedef long long int ll;
public:
    long long minCost(int n, vector<vector<int>>& cost) {
        vector<vector<vector<ll>>> dp(n/2,vector<vector<ll>>(3,vector<ll>(3,LLONG_MAX)));
        
       for(int i = 0;i<3;i++)
       {
        for(int j = 0;j<3;j++)
        {
            if(i!= j)
            dp[0][i][j]=  cost[0][i] + cost[n-1][j];
        }
       }

       for(int row = 1;row<n/2;row++)
       {
        for(int i = 0;i<3;i++)
        {
            for(int j = 0;j<3;j++)
            {
                if(i==j)continue;

                ll temp = LLONG_MAX;

                for(int p=0;p<3;p++)
                {
                    for(int q = 0;q<3;q++)
                    {
                        if(p!= i && q != j && p!=q)
                        {
                            temp = min(temp,dp[row-1][p][q]);
                        }
                    }
                }
                dp[row][i][j] = temp + cost[row][i] + cost[n-row-1][j];
            }
        }
       }
       ll ans = LLONG_MAX;
       for(int i = 0;i<3;i++)
       {
        for(int j = 0;j<3;j++)
        {
            if(i!=j)
            {
                ans = min(ans,dp[n/2-1][i][j]);
            }
        }
       }
       return ans;
    }
};
```
['C++']