class Solution {
public:
    /**
     * 
     * @param matrix int整型vector<vector<>> the matrix
     * @return int整型
     */
    int minPathSum(vector<vector<int> >& matrix) {
        // write code here
        int m[matrix.size()][matrix[0].size()];
        int i;
        int j;
        m[0][0] = matrix[0][0];
        for(i = 1, j = 0; i < matrix.size();i++)
        {
            m[i][j] = matrix[i][j] + m[i-1][j];
        }
        for(i = 0, j = 1; j < matrix[0].size(); j++)
        {
            m[i][j] = matrix[i][j] + m[i][j-1];
        }
        for(i = 1, j = 1; i < matrix.size() && j < matrix[0].size(); i++, j++)
        {
            for(int k = i; k < matrix.size(); k++)
            {
                m[k][j] = min(m[k-1][j]+matrix[k][j], m[k][j-1]+matrix[k][j]);
            }
            for(int q = i; q < matrix[0].size(); q++)
            {
                m[i][q] = min(m[i-1][q]+matrix[i][q], m[i][q-1]+matrix[i][q]);
            }
        }
        if(i < matrix.size())
        {
            for(j = matrix[0].size()-1; i < matrix.size();i++)
            {
                m[i][j] = min(m[i-1][j], m[i][j-1]) + matrix[i][j];
            }
        }
        if(j < matrix[0].size())
        {
            for(i = matrix.size()-1; j < matrix[0].size();j ++)
            {
                m[i][j] = min(m[i-1][j], m[i][j-1]) + matrix[i][j];
            }
        }
//         for(i = 0; i < matrix.size();i++)
//         {
//             for(j = 0; j < matrix[0].size(); j++)
//             {
//                 cout<< m[i][j] << " ";
//             }
//             cout<<endl;
//         }
        return m[matrix.size()-1][matrix[0].size()-1];
    }

};