21: Arithmetic Sequence--HZAU(dp)

http://acm.hzau.edu.cn/problem.php?id=21

题目大意: 给你一个序列问在数字最多的等比数列  

分析:  刚开始看到题就知道是一个dp但是我dp实在是渣到不行

后来发现用二维dp  第二位保存i到j的差  

#include <iostream>
#include <queue>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <stack>
#include <algorithm>
using namespace std;
#define N 2050
#define memset(a,b) memset(a,b,sizeof(a))

int dp[N][N];

int main()
{
    int n;
    while(scanf("%d",&n)!=EOF)
    {
        for(int i=0;i<=2020;i++)
        {
            for(int j=0;j<=2002;j++)
            {
                dp[i][j]=1;
            }
        }
        int a[N];
        memset(a,0);
        for(int i=0;i<n;i++)
        {
            scanf("%d",&a[i]);
        }
        sort(a,a+n);
        int Max=1;
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<i;j++)
            {
                int d=a[i]-a[j];
                dp[i][d]=dp[j][d]+1;
                Max=max(Max,dp[i][d]);
            }
        }
        printf("%d
",Max);
    }
    return 0;
}
原文地址:https://www.cnblogs.com/linliu/p/5497864.html