Simple 3d dp solution

```java []
class Solution {
    Long[][][]dp;
    public long minCost(int n, int[][] cost) {
        int x=n/2;
        dp=new Long[x][4][4];
    return f(0,x,n,0,0,cost);
    }
    public long f(int idx,int l,int n,int s,int e,int[][]cost){
        if(idx>=l)return 0; 
        long ans=(long)(1e14);
        if(dp[idx][s][e]!=null)return dp[idx][s][e];
        if(s==0){
           
              long a=f(idx+1,l,n,1,2,cost)+cost[idx][0]+cost[n-idx-1][1];
              long b=f(idx+1,l,n,1,3,cost)+cost[idx][0]+cost[n-idx-1][2];
              long c=f(idx+1,l,n,2,1,cost)+cost[idx][1]+cost[n-idx-1][0];
              long d=f(idx+1,l,n,2,3,cost)+cost[idx][1]+cost[n-idx-1][2];
              long ee=f(idx+1,l,n,3,1,cost)+cost[idx][2]+cost[n-idx-1][0];
              long ff=f(idx+1,l,n,3,2,cost)+cost[idx][2]+cost[n-idx-1][1];
              ans=Math.min(ans,a);
              b=Math.min(b,Math.min(c,Math.min(d,ee)));
              ans=Math.min(ans,b);
              ans=Math.min(ans,ff);
        }
        else{
            if(s==1){
               if(e==2){
            ans=Math.min(ans,f(idx+1,l,n,3,1,cost)+cost[idx][2]+cost[n-idx-1][0]);
            ans=Math.min(ans,f(idx+1,l,n,2,1,cost)+cost[idx][1]+cost[n-idx-1][0]);
              ans=Math.min(ans,f(idx+1,l,n,2,3,cost)+cost[idx][1]+cost[n-idx-1][2]);
               }
               else{
                             ans=Math.min(ans,f(idx+1,l,n,2,1,cost)+cost[idx][1]+cost[n-idx-1][0]);
             ans=Math.min(ans,f(idx+1,l,n,3,1,cost)+cost[idx][2]+cost[n-idx-1][0]);
                  ans=Math.min(ans,f(idx+1,l,n,3,2,cost)+cost[idx][2]+cost[n-idx-1][1]);
               }
            }
            else if(s==2){
                  if(e==1){
              ans=Math.min(ans,f(idx+1,l,n,1,3,cost)+cost[idx][0]+cost[n-idx-1][2]);
                 ans=Math.min(ans,f(idx+1,l,n,1,2,cost)+cost[idx][0]+cost[n-idx-1][1]);
                    ans=Math.min(ans,f(idx+1,l,n,3,2,cost)+cost[idx][2]+cost[n-idx-1][1]);
                  }
                  //s =1 3 e 2 1
                  else{
 ans=Math.min(ans,f(idx+1,l,n,3,1,cost)+cost[idx][2]+cost[n-idx-1][0]);
  ans=Math.min(ans,f(idx+1,l,n,3,2,cost)+cost[idx][2]+cost[n-idx-1][1]);
   ans=Math.min(ans,f(idx+1,l,n,1,2,cost)+cost[idx][0]+cost[n-idx-1][1]);
                  }
            }
            else if(s==3){
                // s=1,2 e=3,1
                 if(e==2){
 ans=Math.min(ans,f(idx+1,l,n,2,1,cost)+cost[idx][1]+cost[n-idx-1][0]);
 ans=Math.min(ans,f(idx+1,l,n,1,3,cost)+cost[idx][0]+cost[n-idx-1][2]);
  ans=Math.min(ans,f(idx+1,l,n,2,3,cost)+cost[idx][1]+cost[n-idx-1][2]);
                 }
                 // 1 2 e=2 ,3
                 else{
 ans=Math.min(ans,f(idx+1,l,n,1,2,cost)+cost[idx][0]+cost[n-idx-1][1]);
 ans=Math.min(ans,f(idx+1,l,n,1,3,cost)+cost[idx][0]+cost[n-idx-1][2]);
 ans=Math.min(ans,f(idx+1,l,n,2,3,cost)+cost[idx][1]+cost[n-idx-1][2]);
 
 

                 }
            }
        }
        return dp[idx][s][e]=ans;
    }
}
```
['Java']