3
int help(int i, int j, unordered_map<int, int> &mp, vector<int> &nums, vector<vector<int>> &dp) {4
if (dp[i][j] != -1) return dp[i][j];6
int x = nums[i] + nums[j];8
if (mp.find(x) != mp.end()) {9
dp[i][j] = help(j, mp[x], mp, nums, dp);16
int solve(int idx, int n, unordered_map<int, int> &mp, vector<int> &nums,17
vector<vector<int>> &dp) {20
for (int i = idx; i < n; i++) {21
for (int j = i + 1; j < n; j++) {22
int x = nums[i] + nums[j];24
if (mp.find(x) != mp.end()) {25
maxi = max(maxi, 2 + help(j, mp[x], mp, nums, dp));29
return (maxi == INT_MIN ? 0 : maxi);31
int lenLongestFibSubseq(vector<int> &arr) {32
unordered_map<int, int> mp;34
vector<vector<int>> dp(n, vector<int>(n, -1));36
for (int i = 0; i < arr.size(); i++) mp[arr[i]] = i;38
return solve(0, n, mp, arr, dp);