1055 最長等差數列

2021-08-19 00:20:22 字數 1244 閱讀 7987

hash

動態規劃

修改 隱藏話題

1055 最長等差數列

基準時間限制:2 秒 空間限制:262144 kb 分值: 80 

難度:5級演算法題

n個不同的正整數,找出由這些數組成的最長的等差數列。

例如:1 3 5 6 8 9 10 12 13 14

等差子數列包括(僅包括兩項的不列舉)

1 3 5

1 5 9 13

3 6 9 12

3 8 13

5 9 13

6 8 10 12 14

其中6 8 10 12 14最長,長度為5。

input

第1行:n,n為正整數的數量(3 <= n <= 10000)。

第2 - n+1行:n個正整數。(2<= a[i] <= 10^9)

output

最長等差數列的長度。
input示例

1013

5689

1012

1314

output示例

5
sol:

比較詳細的解法:

用dp[i]][j]表示序列前2位是a[i],a[j]序列最大的等差數列最大長度,應該從後往前遞推。

更新的時候,固定j,往兩邊o(n)掃瞄,如果a[i]+a[k]=2*a[j](即構成等差數列),則dp[i][j]=dp[j][k]+1;

注意這裡用int會爆記憶體。

code:

#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;

const int maxn = 1e4+5;

const int inf = 0x3f3f3f3f;

const int mod = 1000000007;

typedef long long ll;

typedef pairpi;

int a[maxn];

short dp[maxn][maxn];

int main()

}for(int i=1;i

for(int j=1;j<=n;j++) ans=max(ans,dp[i][j]);

cout<

return 0;

}

1055 最長等差數列

1055 最長等差數列 基準時間限制 2 秒 空間限制 262144 kb n個不同的正整數,找出由這些數組成的最長的等差數列。例如 1 3 5 6 8 9 10 12 13 14 等差子數列包括 僅包括兩項的不列舉 1 3 5 1 5 9 13 3 6 9 12 3 8 13 5 9 13 6 8...

51nod 1055 最長等差數列

原題鏈結 1055 最長等差數列 基準時間限制 2 秒 空間限制 262144 kb 分值 80 難度 5級演算法題 n個不同的正整數,找出由這些數組成的最長的等差數列。例如 1 3 5 6 8 9 10 12 13 14 等差子數列包括 僅包括兩項的不列舉 1 3 5 1 5 9 13 3 6 9...

51nod 1055 最長等差數列

n個不同的正整數,找出由這些數組成的最長的等差數列。例如 1 3 5 6 8 9 10 12 13 14 等差子數列包括 僅包括兩項的不列舉 1 3 5 1 5 9 13 3 6 9 12 3 8 13 5 9 13 6 8 10 12 14 其中6 8 10 12 14最長,長度為5。input ...