0

1.行列を表す 2D 配列があります。最大の合計を持つ正方部分行列を見つける必要があります。サブマトリックスのサイズは、行または列の数を 2 で割ったものです。たとえば、これがある場合

9 3 5 9
2 5 9 8
8 4 9 7
9 5 3 9

最大のサブマトリックスは

9 8
9 7

総和が一番大きいからです。


2.次に、順列を持つ最大の部分行列を見つける必要があります。つまり、サブマトリックスの形状を持つ最大の数字 (同じ列または同じ行に少なくとも 2 つの数字) を選択する必要があります。たとえば、斜めのエッジにある 4 つのナイン

9 9
9 9

しかし、行列の形をしているため、最初の行を取得して行列を作成することはできません。

私はまだそれに苦労しているので、助けてください。

これが私のコードで、submはサブマトリックスのサイズです

for (i=0;i<rows-subm;i++){
          for(j=0;j<colums-subm;j++)
          {
             temp=pic[i][j]+pic[i][j+1]+pic[i+1][j]+pic[i+1][j+1];
             if(temp > summax)
                 summax=temp;
          }
 }
4

1 に答える 1

1

行列式計算アプローチを使用します。この例をチェックしてください。2x2 行列の行列式は次のように計算されます。

ab

CD

ad-cb

Instead use a+b+c+d

例の 2x2 行列計算を次のように置き換えます。

result = mat[0][0] + mat[1][1] + mat[0][1] + mat[1][0]; 

これらすべての値を記録し、それらから最大値を見つけます

于 2012-09-06T07:32:28.167 に答える