classSolution{public:introws;intcols;intminnow;intminPathSum(vector<vector<int>>&grid){// IMPORTANT: Please reset any member data you declared, as
// the same Solution instance will be reused for each test case.
rows=grid.size()-1;cols=grid[0].size()-1;vector<vector<int>>copygrid(grid.size());intsum=0;for(inti=0;i<grid.size();i++){for(intj=0;j<grid[0].size();j++){sum+=grid[i][j];}}for(inti=0;i<grid.size();i++){vector<int>tmp(grid[0].size());for(intj=0;j<grid[0].size();j++){tmp[j]=sum;}copygrid[i]=tmp;}copygrid[0][0]=grid[0][0];intpx[10000],py[10000];intcpx[20000],cpy[20000];intindex=0;px[index]=0;py[index++]=0;while(true){inttop=index;index=0;for(inti=0;i<top;i++){intx=px[i];inty=py[i];if(x+1<=rows){if(copygrid[x][y]+grid[x+1][y]<copygrid[x+1][y]){copygrid[x+1][y]=copygrid[x][y]+grid[x+1][y];cpx[index]=x+1;cpy[index]=y;index++;}}if(y+1<=cols){if(copygrid[x][y]+grid[x][y+1]<copygrid[x][y+1]){copygrid[x][y+1]=copygrid[x][y]+grid[x][y+1];cpx[index]=x;cpy[index]=y+1;index++;}}}if(index==0)break;for(inti=0;i<index;i++){px[i]=cpx[i];py[i]=cpy[i];}}returncopygrid[rows][cols];}};