classSolution { public: intlenLongestFibSubseq(vector<int>& A){ int N = A.size(); unordered_map<int, int> index; for (int i = 0; i < N; ++i) index[A[i]] = i;
unordered_map<int, int> longest; int ans = 0; for (int k = 0; k < N; ++k) for (int j = 0; j < k; ++j) { if (A[k] - A[j] < A[j] && index.count(A[k] - A[j])) { int i = index[A[k] - A[j]]; longest[j * N + k] = longest[i * N + j] + 1; ans = max(ans, longest[j * N + k] + 2); } }