Leetcodeインタビューの質問17.24。最大のサブマトリックス(65日目)----動的計画法の学習期間(本当に難しい:(私はアイデアをまったく見ていません)

元のタイトル

ここに画像の説明を挿入します



コードの実装(アイデアを一目瞭然に読む最初のブラシ)

/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* getMaxMatrix(int** matrix, int matrixSize, int* matrixColSize, int* returnSize){
    
    
    int* ret = (int*)malloc(sizeof(int) * 4);
    int i,j,k,max = INT_MIN;
    (*returnSize) = 4;
    memset(ret,0,sizeof(int) * 4);

    int dp[201][201];
    memset(dp,0,sizeof(dp));
    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] = matrix[i][j] + dp[i][j-1];
        }
    }
    int leftrow,rightrow,tempsum = 0;
    for(i=0;i<matrixColSize[0];i++)
    {
    
    
        for(j=i;j<matrixColSize[0];j++)
        {
    
    
            tempsum = rightrow = leftrow = 0;
            for(k=0;k<matrixSize;k++)
            {
    
    
                tempsum = tempsum + dp[k][j] - (i>0 ? dp[k][i-1] : 0);
                if(tempsum > max)
                {
    
    
                    max = tempsum;
                    rightrow = k;
                    ret[0] = leftrow,ret[1] = i;
                    ret[2] = rightrow,ret[3] = j;
                }
                if(tempsum < 0)
                {
    
    
                    tempsum = 0;
                    leftrow = k+1;
                }
            }
        }
    }
    return ret;
}

おすすめ

転載: blog.csdn.net/qq_37500516/article/details/114780555
おすすめ