原题链接:https://leetcode-cn.com/problems/longest-arithmetic-sequence/
动态规划
dp[i][dif]表示i位置上差为dif的等差数列的最长长度
状态转移
dp[i][dif]=max(dp[i][dif],dp[j][dif]+1) 0<j<i
代码:
int longestArithSeqLength(vector<int>& A) {
int len=A.size();
vector<vector<int>> dp(len,vector<int>(20001,1));
int ans=INT_MIN;
for(int i=1;i<len;i++){
for(int j=0;j<i;j++){
const int offset=10000;//使用偏移保证所有差都为正
int dif=A[i]-A[j]+offset;
dp[i][dif]=max(dp[i][dif],dp[j][dif]+1);
ans=max(ans,dp[i][dif]);
}
}
return ans;
}