int numSubmatrixSumTarget(int** matrix, int matrixSize, int* matrixColSize, int target){ int i,j,m,n,tempsum = 0,ret = 0,dp[matrixSize+1][matrixColSize[0]]; for(i=0;i<matrixSize;i++) { for(j=0;j<matrixColSize[0];j++) { if(!j) dp[i][j] = matrix[i][j]; else dp[i][j] = dp[i][j-1] + matrix[i][j]; } } for(i=0;i<matrixColSize[0];i++) { for(j=i;j<matrixColSize[0];j++) { for(m=0;m<matrixSize;m++) { tempsum = 0; for(n=m;n<matrixSize;n++) { tempsum += (dp[n][j] - (i>0 ? dp[n][i-1] : 0)); if(tempsum == target) ret++; } } } } return ret; }