C++ DP :)
Code
# Code
```cpp []
class Solution {
public:

    int t[502][502][3];

    int Solve(vector<vector<int>>&A, int i, int j, int powerUsed){
        int N = A.size(), M = A[0].size();
        if(i >= N || j>= M) return -1e9;
        if(i==N-1 && j==M-1){
            if(A[i][j] >= 0 ) return A[i][j];

            if(powerUsed < 2) return 0;
            return A[i][j];
        }

        if(t[i][j][powerUsed]!=-1)
            return t[i][j][powerUsed];
        
        int Ans = -1e9;
        if(A[i][j] >= 0) {
            Ans = max(Ans, A[i][j] + 
                max(Solve(A, i+1, j, powerUsed), Solve(A, i, j+1, powerUsed))
            );
        } else{
            if(powerUsed < 2){
                Ans = 0 + max(Ans, 
                    max(Solve(A, i+1, j, powerUsed+1), Solve(A, i, j+1, powerUsed+1))
                    );
            }

            Ans = max(Ans, A[i][j] + max(Solve(A, i+1, j, powerUsed), Solve(A, i, j+1, powerUsed)) );
        }

        return t[i][j][powerUsed] = Ans;
    }

    int maximumAmount(vector<vector<int>>& coins) {
        memset(t, -1, sizeof(t));
        return Solve(coins, 0, 0, 0);
    }
};
```
['Dynamic Programming', 'C++']