【发布时间】:2019-03-18 09:54:03
【问题描述】:
我有一个大小为 P*Q 的二维数组,我必须根据该数组回答 K 个问题。给定的二维数组由数字 0 和 1 组成。对于每个问题,我们必须计算没有两个相同元素相邻的任何正方形子数组的最大大小。 例如,如果 P=Q=8 并且我们给定的数组是
00101010
00010101
10101010
01010101
10101010
01010101
10101010
01010101
那么问题 Ki 允许我们做 Ki 翻转次数(0 到 1 或 1 到 0)。
Here K=4(number of questions)
1 2 0 10001
Output: 7 8 6 8
我明白了,对于K1=1,我们可以将数组index(1,1)的值改为1,得到一个7*7大小的有效矩阵,输出为7。如果我们有Ki>=2我们的答案是 8。 我认为我们必须维护一个数组 ans[k] ,它存储有效的方形子矩阵的最大大小。为此,我们可以从原始数组的每个索引开始,并遍历其子数组,如果我们从该索引开始,则计算 Flip=i 的最大大小的值。我们必须对从每个索引开始的子数组执行此操作,然后将它们的最大值存储在 Flip[i] 中。 我在实现这一点时遇到了问题,因为我不知道如何遍历给定索引的所有子数组。我尝试了这么久,但仍然没有实现。有人可以帮忙吗?
【问题讨论】:
-
使用向量的向量或数组的数组和两个基于范围的循环。或者实现你自己的矩阵类。
-
@Ron 你能解释一下吗?
-
明确一点,这里的动态规划算法不是的问题,对吧?
-
@Davis 这是问题
标签: c++ arrays loops dynamic-programming sub-array