给定大小为n(1 <= n <= 200000)的数组,其中每个条目a [i](1 <= a [i] <= 100),找到形成算术级数的所有子序列数。 子序列是可以在原始序列中保留任意数量元素的序列。 例如,序列A,B,D是去除元素C,E和F后获得的A,B,C,D,E,F的子序列。一个序列作为另一个序列的子序列的关系是预序。
我使用DP编写了O(n ^ 2)解决方案。但是n ^ 2 = 10 ^ 10。所以,它不会被接受。 这就是我做的。 伪代码:
for every element A[i]:
for every element A[k] such that k<i:
diff = A[i] - A[k] + 100: (adding 100, -ve differences A.P.)
dp[i][diff] += dp[i-1][diff] + 1;
for every element A[i]:
for every diff, d:
ans = ans + dp[i][d];
return ans;
这给出了正确的输出,但是TLE适用于3个大案例。
P.S。请建议更好的解决方案.. !!
这里需要划分和征服优化DP吗?如果是,请告诉我如何构建解决方案。