问题链接是here。问题基本上是将大小为N的给定矩阵的所有这些子矩阵计数为M,其元素之和在A和B之间。 N,M< = 250。 10 ^ -9< = A< = B< = 10 ^ 9
人们已经使用DP和BIT解决了它。我不清楚如何。
首先,我试图解决一个更简单的版本,上述问题的一维情况:给定一个长度为N的数组A,计算所有子数组,其中子数组中的元素总和位于A和B之间,但仍然想不到比O(n ^ 2)好。这是我做的:
我想过制作另一个数组来保存原始数组的前缀和,比如前缀[N]。 prefix [i] = A 1 + A [2] + A [3] + ... A [i]。 set prefix [1] = A [1]。那么对于从2到N的每个i,问题是对所有j< = i进行计数,使得和Z = A [j] + A [j + 1] + ..A [i]位于A和B之间。这是相当于前缀[i] - 前缀[j-1]。但它仍然是O(n ^ 2),因为对于每个i,j正在击中我的位置。
任何人都可以帮助我一步一步地推进我解决主要问题的方法吗?