声明:博主是在看了左神讲解之后写的代码,主要目的是为了自己复习巩固,同时将左神的辛苦汗水和宝贵思路发扬出去,哇哈哈哈哈哈。
明天再写喽
1、小易喜欢的数列(网易2018内推题)
小易非常喜欢拥有以下性质的数列: 1、数列的长度为n 2、数列中的每个数都在1到k之间(包括1和k) 3、对于位置相邻的两个数A和B(A在B前),都满足(A <= B)或(A mod B != 0)(满足其一即可) 例如,当n = 4, k = 7 那么{1,7,7,2},它的长度是4,所有数字也在1到7范围内,并且满足第三条性质,所以小易是喜欢这个数列的 但是小易不喜欢{4,4,4,2}这个数列。小易给出n和k,希望你能帮他求出有多少个是他会喜欢的数列。
这是属于一大类题目:
(1)先写出递归程序,这一步是最难的,需要将问题抽象成一个子问题,想象程序是按照某个步骤重复的递归实现的。暴力递归的训练需要大量的刷题。(重重之重)
(2)在递归函数中,有的参数是不变量,有的参数是变的,变的参数可以设置成动态规划的某一维,寻找传入参数与递归式的位置依赖关系,写出动态规划版本。
首先找到边界条件或者初始条件(不依赖其他位置),然后寻找普通情况下的依赖关系,动态规划可能是依赖几项,或者某一排,或者别的,选择较好的方式循环操作。
(3)笔试时,内存超限,考虑动态规划压缩,这里需要注意新旧值覆盖问题,选择的某一列数组,要有合适的循环顺序,先更改不被依赖的位置的值(比如leetcode杨辉三角),还有啥四边形不等式(冷门),我并不知道咋做。