动态规划,算术级数,时间复杂度问题

时间:2016-10-31 22:48:12

标签: math dynamic-programming

给定大小为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吗?如果是,请告诉我如何构建解决方案。

0 个答案:

没有答案