定义 f[i][j]为使用 arr[i] 为斐波那契数列的最后一位,使用 arr[j] 为倒数第二位(即 arr[i]的前一位)时的最长数列长度。
首先根据斐波那契数列的定义,我们可以直接算得 arr[j]前一位的值为 arr[i] - arr[j],而快速得知 arr[i] - arr[j] 值的坐标 t,可以利用 arr 的严格单调递增性质,使用「哈希表」对坐标进行转存,若坐标 t 存在,并且符合 t<j,说明此时至少凑成了长度为 3 的斐波那契数列,同时结合状态定义,可以使用 f[j][t] 来更新 f[i][j],即有状态转移方程: