社区讨论

关于dfs

学术版参与者 3已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@m1tc9zqr
此快照首次捕获于
2024/10/03 21:35
去年
此快照最后确认于
2024/10/03 21:43
去年
查看原帖
模拟赛题, 给出两个长为nn的数组aabb, 求出i=1nmax(ai,bi)\displaystyle \sum_{i = 1}^{n} \max(a_{i}, b_{i}).
正解显然是O(n)O(n), 但是考虑DFS.
CPP
int dfs(int i, int s) {
  if (i == n + 1) {
    return s;
  }
  return max(dfs(i + 1, s + a[i]), dfs(i + 1, s + b[i]));
}
很明显是O(2n)O(2^n), 再考虑优化.
CPP
int dfs(int i, int s) {
  if (i == n + 1) {
    return s;
  }
  return dfs(i + 1, s + max(a[i], b[i]));
}
根据DFS时间复杂度=O(kn)= O(k ^ n)其中kk是状态数, 很明显是O(1n)=O(1)O(1^n) = O(1), 然而稍微一分析就想到是O(n)O(n), 为什么会出这样的问题?

回复

2 条回复,欢迎继续交流。

正在加载回复...