海贼19-8班现场课
20569人加入学习
(0人评价)
编码能力训练课

0基础入门,突破欧拉50题

价格 ¥ 299.00
该课程属于 海贼19-8班(C++高薪班) 请加入后再学习

总结:

1、记忆化搜索,需要开一个新的数组,然后在新的递归之前,直接返回累加值;

#define max_n 20

 

int val[max_n][max_n] = {0};

int keep[max_n][max_n] = {0};

 

int dfs(int i, int j, int n) {

    if (i + 1 ==n) return val[i][j];

    if (keep[i][j]) return keep[i][j];        //在新的递归开始前,直接返回累加值,正是这个返回记录值,减少了递归的次数。

    int val1 = dfs(i + 1, j, n);

    int val2 = dfs(i + 1, j + 1, n);

    return keep[i][j] = (val1 > val2 ? val1 : val2) + val[i][j];        //记忆化。

}

2、深度优先搜索的写法要记住,这是一种很简洁的写法。

#define max_n 20

 

int val[max_n][max_n] = {0};

 

int dfs(int i, int j, int n) {

    if (i + 1 == n) return val[i][j];

    int val1 = dfs(i + 1, j, n);

    int val2 = dfs(i + 1, j + 1, n);

    return (val1 > val2 ? val1 : val2) + val[i][j];

}

3、DFS(i, j, n)从位置(i,j)向下走n步的最大值;

[展开全文]

授课教师

高级算法研发工程师
C++算法工程师

课程特色

视频(41)
文档(51)
图文(71)