模拟赛题, 给出两个长为n的数组a和b, 求出i=1∑nmax(ai,bi).
正解显然是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), 再考虑优化.
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)其中k是状态数, 很明显是O(1n)=O(1), 然而稍微一分析就想到是O(n), 为什么会出这样的问题?