class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param presentVolumn int整型vector<vector<>> N*M的矩阵,每个元素是这个地板砖上的礼物体积
     * @return int整型
     */
    int selectPresent(vector<vector<int> >& presentVolumn) {
        // write code here
        int n = presentVolumn.size();
        int m = presentVolumn[0].size();
        int *dp = new int[n*m];
        dp[0]=presentVolumn[0][0];
        for(int i =1; i<n;i++)
        {
            dp[i*m]=dp[(i-1)*m]+presentVolumn[i][0];
//             cout<<dp[i*m]<<" ";
        }
        for(int i =1; i<m;i++)
        {
            dp[i]=dp[i-1]+presentVolumn[0][i];
        }
        for(int i =1; i<n;i++)
        {
            for(int j =1; j<m;j++)
            {
                int min1=min(dp[i*m+j-1],dp[(i-1)*m+j]);
                min1 = min(min1,dp[(i-1)*m+j-1]);
                dp[i*m+j] = min1+presentVolumn[i][j];
            }
        }
//         for(int i =0; i<n;i++)
//         {
//             for(int j =0; j<m;j++)
//             {
//                 cout<<dp[i*m+j]<<" ";
//             }
//             cout<<endl;
//         }
        return dp[m*n-1];
        /*
        1 2 3
        2 3 4
        */
    }
};