小公尺oj 有多少個等差數列(動態規劃)

2021-08-30 13:13:43 字數 1066 閱讀 3863

序號:#20難度:困難時間限制:500ms記憶體限制:10m

描述等差數列是常見數列的一種,如果乙個數列從第二項起,每一項與它的前一項的差等於同乙個常數,這個數列就叫做等差數列,而這個常數叫做等差數列的公差,公差常用字母d表示。即對於數列s,它滿足了(s[i]-s[i-1]) = d (i \gt 1)(s[i]−s[i−1])=d(i>1)。 顯然,乙個數字無法構成等差數列,而任意兩個數字可以形成乙個等差數列。 這裡給出了乙個長度為n (0 \lt n \lt 200)n(01) 輸出資料格式:等差數列數量 mm; 其中數列 ss 的項為整數

請注意時間複雜度的限制。

輸入輸入乙個數列[ 2 7 4 5 6 ],該數列包含等差數列: [ 2 7 ] [ 2 4 ] [ 2 5 ] [ 2 6 ] [ 7 4 ] [ 7 5 ] [ 7 6 ] [ 4 5 ] [ 4 6 ] [ 5 6 ] [ 2 4 6 ] [ 4 5 6 ]

輸出上例共包含12組等差數列,故應輸出12

輸入樣例

2 7 4 5 6

3 3 3 3

複製樣例

輸出樣例

12

11

思路:設dp[i][k]表示以a[i]為起點,k為公差的等差數列的個數。

轉移方程為:if(a[j]+k==a[i])dp[j][k]+=(dp[i][k]+1);  (j#include#include#include#include#include#include#include#include#include#includeusing namespace std;

#define inf 0x3f3f3f3f

typedef long long ll;

char buf[100000];

int a[205];

ll dp[205][405];

int main()

ll ans=0;

for(int k=-200;k<=200;k++)}}

for(int i=0;i

}cout<

}return 0;

}

華為oj 等差數列

問題描述 功能 等差數列 2,5,8,11,14。輸入 正整數n 0 輸出 求等差數列前n項和 返回 轉換成功返回 0 非法輸入與異常返回 1 知識點 函式 練習階段 初級 執行時間限制 10sec 記憶體限制 128mbyte 輸入 輸入乙個正整數。輸出 輸出乙個相加後的整數。樣例輸入 2 樣例輸...

等差數列(線性動歸)

題目描述 給定n 1 n 100 個數,從中找出盡可能多的數使得他們能夠組成乙個等差數列.求最長的等差數列的長度.輸入描述 第一行是乙個整數n,接下來一行包括了n個數,每個數的絕對值不超過10000000.輸出描述 對於每個輸入資料,輸出你所找出的最長等差數列的長度 樣例輸入 7 3 8 4 5 6...

華為oj 尋找等差數列

本題提供兩種解法 1.找到首尾之間的所有的素數形成乙個陣列prime,那麼這個陣列形成的等差數列中,公差最大的的就是這個數列首尾數字的差值,對公差從1到最大值進行迴圈,找到數列中公差等於上述範圍的所有數列,找到數列包含數字最多的就可以了,時間複雜度o kn 2 includeusing namesp...