思路
1.任意两个数都可以组成一个算术数组
2.动态转移方程式:
if(a[j]-a[j-1]==a[j-1]-a[j-2])dp[j]=max(dp[j],dp[j-1]+1);
如果a[j]-a[j-1]==a[j-1]-a[j-2],则满足算术数组,dp[j]=max(dp[j],dp[j-1]+1);
dp[j]=dp[j]和没把a[j]放入算术数组的dp[j-1]的最长算术数组中,则当前以a[j]结尾的算术数组的长度最长为max(dp[j],dp[j-1]+1)
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=1e5*2+1e4;
ll t,n;
ll a[N];
signed main()
{
cin>>t;
for(ll i=1;i<=t;i++)
{
cin>>n;
ll dp[N];
for(ll j=1;j<=n;j++)
{
cin>>a[j];
dp[j]=2;//任意两个数都可以组成一个算术数组
}
ll ans=0;
for(ll j=3;j<=n;j++)
{
if(a[j]-a[j-1]==a[j-1]-a[j-2])dp[j]=max(dp[j],dp[j-1]+1);//动态转移方程式
ans=max(dp[j],ans);
}
cout<<"Case #"<<i<<": "<<ans<<"\n";
}
return 0;
}
你好 请问题目的意思是 算数数组已经在Ai中了 只要找出最长的就可以了吗
[4 100 7 92 10 0 13] 4 7 10 13 这样的不算?
题目中说的是最长连续算术子数组
连续嘞