bzoj 3357 [Usaco2004]等差数列 dp
生活随笔
收集整理的這篇文章主要介紹了
bzoj 3357 [Usaco2004]等差数列 dp
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
[Usaco2004]等差數(shù)列
Time Limit:?10 Sec??Memory Limit:?128 MBSubmit:?486??Solved:?227
[Submit][Status][Discuss]
Description
約翰發(fā)現(xiàn)奶牛經(jīng)常排成等差數(shù)列的號碼.他看到五頭牛排成這樣的序號:“1,4,3,5,7” 很容易看出“1,3,5,7”是等差數(shù)列. 給出N(1≤N≤2000)數(shù)字AI..AN(O≤Ai≤10^9),找出最長的等差數(shù)列,輸出長度.Input
第1行:一個整數(shù)N. 第2到N+1行:每行一個整數(shù)Ai,表示牛的號碼.Output
最長等差數(shù)列的長度.Sample Input
51
4
3
5
7
Sample Output
4HINT
想到n^2logn的算法,f[i][j]表示結(jié)尾為i公差為j的答案 用map維護(hù) 1 #include<cstring> 2 #include<cstdio> 3 #include<algorithm> 4 #include<iostream> 5 #include<cmath> 6 #include<queue> 7 #include<vector> 8 #include<map> 9 10 #define N 2007 11 #define mod 1000000007 12 #define fzy pair<int,int> 13 using namespace std; 14 inline int read() 15 { 16 int x=0,f=1;char ch=getchar(); 17 while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();} 18 while(isdigit(ch)){x=(x<<1)+(x<<3)+ch-'0';ch=getchar();} 19 return x*f; 20 } 21 22 int n; 23 map<int,int>f[N]; 24 int a[N]; 25 26 int main() 27 { 28 n=read(); 29 for(int i=1;i<=n;i++) 30 a[i]=read(); 31 if(n==1) 32 { 33 printf("1\n"); 34 return 0; 35 } 36 int ans=0; 37 for(int i=1;i<=n;i++) 38 { 39 for(int j=1;j<i;j++) 40 { 41 f[i][a[i]-a[j]]=max(max(f[i][a[i]-a[j]],f[j][a[i]-a[j]]+1),2); 42 ans=max(f[i][a[i]-a[j]],ans); 43 } 44 } 45 printf("%d\n",ans); 46 }?
?
轉(zhuǎn)載于:https://www.cnblogs.com/fengzhiyuan/p/8847952.html
總結(jié)
以上是生活随笔為你收集整理的bzoj 3357 [Usaco2004]等差数列 dp的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。