关于dfs
  • 板块学术版
  • 楼主封禁用户
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/10/3 21:34
  • 上次更新2024/10/3 21:43:50
查看原帖
关于dfs
958730
封禁用户楼主2024/10/3 21:34

模拟赛题, 给出两个长为nn的数组aabb, 求出i=1nmax(ai,bi)\displaystyle \sum_{i = 1}^{n} \max(a_{i}, b_{i}).

正解显然是O(n)O(n), 但是考虑DFS.

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), 再考虑优化.

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), 为什么会出这样的问题?

2024/10/3 21:34
加载中...