这道题其实就是二维dp
class Solution {
public:
int lenLongestFibSubseq(vector<int>& A) {
map<int,int> idxs;
vector<vector<int> > dp(A.size());
set<int> nums;
int ans=0;
int data[A.size()][A.size()];
memset(data,0,sizeof(data));
for(int i=0;i<A.size();i++)
{
idxs[A[i]]=i;
nums.insert(A[i]);
}
for(int i=0;i<A.size()-2;i++)
{
for(int q=i+1;q<A.size()-1;q++)
{
if(nums.find(A[i]+A[q])!=nums.end())
{
int idx=idxs[A[i]+A[q]];
dp[idx].push_back(i);
dp[idx].push_back(q);
data[q][idx]=3;
ans=3;
}
}
}
for(int i=3;i<A.size();i++)
{
for(int q=0;q<dp[i].size();q+=2)
{
int idx1=dp[i][q];
int idx2=dp[i][q+1];
data[idx2][i]=max(data[idx2][i],data[idx1][idx2]+1);
ans=max(data[idx2][i],ans);
}
}
return ans;
}
};