C++ 用“全部1”计算子矩阵
给我一个N*M的0和1的网格,我需要找到大小为a*B的子矩阵的数量,这些子矩阵中都有1 假设我有一个2*6的网格 网格为: 0110 01 现在如果我想找到大小为2*3的子矩阵C++ 用“全部1”计算子矩阵,c++,algorithm,C++,Algorithm,给我一个N*M的0和1的网格,我需要找到大小为a*B的子矩阵的数量,这些子矩阵中都有1 假设我有一个2*6的网格 网格为: 0110 01 现在如果我想找到大小为2*3的子矩阵 然后这里的答案是2。编辑:以下提示假设“子矩阵”的意思是“行的连续子集和列的连续子集的交点”。(通常允许子矩阵跳过行和列。) 我相信这是一个家庭作业问题,所以我只提供一个提示,而不是完整的答案 假设有一种方法可以有效地计算每个单元格(i,j),它是否是一行中至少m1运行的最右边的单元格。那会有什么帮助 另一个提示:任何给
然后这里的答案是2。编辑:以下提示假设“子矩阵”的意思是“行的连续子集和列的连续子集的交点”。(通常允许子矩阵跳过行和列。) 我相信这是一个家庭作业问题,所以我只提供一个提示,而不是完整的答案 假设有一种方法可以有效地计算每个单元格(i,j),它是否是一行中至少m1运行的最右边的单元格。那会有什么帮助
另一个提示:任何给定的单元格(i,j)要么是1的N*M网格的最右下角,要么不是。我不明白为什么是2(我找到3)。你能解释一下吗?@hivert从(0,1)开始的那个和从(0,2)开始的那个。哪一个是第三个?和OP,请告诉我们您到目前为止尝试了什么。@hivert怎么做三个?它们只有两个。一个在开始索引(1,2)处,另一个在开始索引(1,3)@Carsten我知道使用直方图下的最大面积来查找所有1的最大子矩阵。对于这个问题可以修改吗?是否有任何特殊要求,例如关于运行时间?到目前为止,这个问题听起来很简单:
对于每个单元格(x,y){if(thereisasubmatrix(x,y))count++;}
。顺便说一句:一些编程语言标签可能也很有趣。