请优化算法,减少这段代码的时间复杂度:m = int(input()) for _ in range(m): n = int(input()) f = [0] * (n + 1) f[0] = 1 for i in range(1, n + 1): for j in range(1, 5): if i >= j: f[i] += f[i - j] print(f[n])
时间: 2023-12-03 10:44:35 浏览: 73
leetcode-in-go:使用go解决leetcode问题
这段代码使用了动态规划的思想,但在实现上存在重复计算的问题。可以通过使用滚动数组,避免重复计算,从而将时间复杂度从 $O(mn)$ 降低到 $O(n)$。
代码如下:
```
m = int(input())
for _ in range(m):
n = int(input())
f = [0] * 5
f[0] = 1
for i in range(1, n + 1):
f[i % 5] = f[(i - 1) % 5] + f[(i - 2) % 5] + f[(i - 3) % 5] + f[(i - 4) % 5]
print(f[n % 5])
```
在上述代码中,我们只保留了当前状态和前四个状态的值,而不是保留所有状态的值。这样做可以减少空间复杂度,同时也避免了重复计算的问题。
阅读全文