给你n个数,求出其最长的等差数列的子序列。
首先问题并没有要求要按照原来数组的顺序,所以可以先对该数组排序
模板
const int MAX=1010;
int dp[MAX][MAX];//dp[i][j]以i为结尾的某子序列(该子序列的公差为j)的最大长度
int n;//n个数
int a[MAX];//大小为n的数列
int longestSubSeq(int a[])
{
int s=n;
if (s <= 1) return s;
sort(a,a+n);//可以在主函数里排序
int ans=1;
int i,j;
for(i=0;i<MAX;i++)
for(j=0;j<MAX;j++)
dp[i][j]=1; //单独成列
for(i=1;i<n;i++)
{
for(j=0;j<i;j++)
{
int d=a[i]-a[j];//d为公差
dp[i][d]=dp[j][d]+1;
ans=max(ans,dp[i][d]);
}
}
return ans;
}
下面是一个求最长等差子序列的题
Problem J: Arithmetic Sequence
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 1805