zoukankan      html  css  js  c++  java
  • 3357: [Usaco2004]等差数列

    3357: [Usaco2004]等差数列

    Time Limit: 10 Sec  Memory Limit: 128 MB
    Submit: 321  Solved: 153
    [Submit][Status][Discuss]

    Description

        约翰发现奶牛经常排成等差数列的号码.他看到五头牛排成这样的序号:“1,4,3,5,7”
    很容易看出“1,3,5,7”是等差数列.
        给出N(1≤N≤2000)数字AI..AN(O≤Ai≤10^9),找出最长的等差数列,输出长度.

    Input

        第1行:一个整数N.
        第2到N+1行:每行一个整数Ai,表示牛的号码.

    Output

     
        最长等差数列的长度.

    Sample Input

    5
    1
    4
    3
    5
    7

    Sample Output

    4

    HINT

     

    Source

    //f[i][j]表示当前等差数列最后一个数为a[i],倒数第二个数为j的最长长度
    #include<cstdio>
    #include<map>
    using namespace std;
    int read(){
        register int x=0;bool f=1;
        register char ch=getchar();
        while(ch<'0'||ch>'9'){if(ch=='-')f=0;ch=getchar();}
        while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
        return f?x:-x;
    }
    const int N=1e5+10;
    map<int,int>f[N];
    int n,ans,a[N];
    int main(){
        n=read();
        for(int i=1;i<=n;i++) a[i]=read();
        if(n==1){puts("1");return 0;}
        for(int i=2;i<=n;i++){
            for(int j=1;j<i;j++){
                ans=max(ans,f[i][a[j]]=max(2,max(f[i][a[j]],f[j][2*a[j]-a[i]]+1)));
                                                        //这里是等差中项 
            }
        }
        printf("%d",ans);
        return 0;
    }
  • 相关阅读:
    Cookie和Seesion
    Forms组件
    分页器组件
    关于Django的Ajax操作
    Oracle常用数据库表操作
    redis的缓存穿透 缓存并发 缓存失效
    Struts2的拦截器
    Struts2的各种标签库
    Struts2基础知识
    Java常用数据结构和算法
  • 原文地址:https://www.cnblogs.com/shenben/p/6254890.html
Copyright © 2011-2022 走看看