BZOJ 3357 Usaco2004 等差数列 动态规划
发布时间:2020-12-13 20:16:15 所属栏目:PHP教程 来源:网络整理
导读:题目大意:给定1个长度为n的序列,求最大等差子序列 令f[i][j]表示当前等差数列最后1个数为a[i],倒数第2个数为j的最长长度 则有f[i][a[j]]=max{2,f[j][a[j]*2-a[i]]1} 注意n=1时输出1 时间复杂度O(n^2logn) #include map#include cstdio#include cstring#in
题目大意:给定1个长度为n的序列,求最大等差子序列 令f[i][j]表示当前等差数列最后1个数为a[i],倒数第2个数为j的最长长度 则有f[i][a[j]]=max{2,f[j][a[j]*2-a[i]]+1} 注意n=1时输出1 时间复杂度O(n^2logn) #include <map>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define M 2020
using namespace std;
int n,ans,a[M];
map<int,int> f[M];
//f[i][j]表示当前等差数列最后1个数为a[i],倒数第2个数为j的最长长度
int main()
{
int i,j;
cin>>n;
if(n==1) return cout<<1<<endl,0;
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
for(i=1;i<=n;i++)
for(j=1;j<i;j++)
{
f[i][a[j]]=max(f[i][a[j]],2);
f[i][a[j]]=max(f[i][a[j]],f[j][a[j]*2-a[i]]+1);
ans=max(ans,f[i][a[j]]);
}
cout<<ans<<endl;
return 0;
}
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |