假设我们给出了一个NxN平方和二进制矩阵和一个正数K.我们需要找到子矩阵的数量,这样每个子矩阵的值之和等于K.我试过使用a的思想总结区域表如下所述:Calculate the sum of elements in a matrix efficiently
在这里:Calculate the sum of elements in a matrix efficiently
但我最好的解决方案有一个O(n ^ 4)的复杂性,因为我需要检查每个可能的子矩阵,而不仅仅是上面链接上的一个子矩阵。任何帮助都会非常感激。
编辑:抱歉没有清除它。因此,如果输入矩阵是3x3 {001} {010} {000}且K = 1,则输出应为17,这意味着我们已经找到了每个可能的子矩阵,其值的总和等于K.对于输入: {0,1,0,1,0} {1,0,1,0,1} {0,1,0,1,0} {1,0,1,0,1} {0,1,0,1,0}和K = 6,预期结果为12.这是我的代码,假设我们已经构建了Summed Area Table(satMatrix)
count=0;
for(i=0; i<N; i++) //main loop
{
for(j=0; j<N; j++)
{
sumOfSubmatrix=satMatrix[i][j];
if(sumOfSubmatrix==K) count++ ;
for(int i1=0; i1<i; i1++)
{
sumOfSubmatrix=satMatrix[i][j]-satMatrix[i1][j];
if(sumOfSubmatrix==K) count++ ;
}
for(int j1=0; j1<j; j1++)
{
sumOfSubmatrix=satMatrix[i][j]-satMatrix[i][j1];
if(sumOfSubmatrix==K) count++ ;
}
}
}