题目
给定一个非递减数组x,求出公差为2的最长等差子序列的长度。
例子
x=[2,3,4,5,7,9]
返回:4
分析
动态规划:
for(int i=0;i<n;i++){
for(int j=0;j<i;j++){
if(x[i]-x[j]==2){
f[i]=max(f[i],f[j]+1);
}
}
}
代码
#include<bits/stdc++.h>
using namespace std;
int main(){
vector<int>x;
int n,ret=0,num;
cin>>n;
for(int i=0;i<n;i++){
cin>>num;
x.push_back(num);
}
int f[n];
for(int i=0;i<n;i++) f[i]=1;
for(int i=0;i<n;i++){
for(int j=0;j<i;j++){
if(x[i]-x[j]==2){
f[i]=max(f[i],f[j]+1);
}
}
}
for(int i=0;i<n;i++){
ret=max(ret,f[i]);
}
cout<<ret<<endl;
system("pause");
return 0;
}