2205 等差數列 dp

2022-04-06 02:31:42 字數 1259 閱讀 9573

時間限制: 1 s

空間限制: 32000 kb

題目等級 : 鑽石 diamond

等差數列的定義是乙個數列s,它滿足了(s[i]-s[i-1]) = d (i>1)。顯然的乙個單獨的數字或者兩個數字也可以形成乙個等差數列。

經過一定的學習小c發現這個問題太簡單了,等差數列的和不就是(sn+s1)*n/2?因為這個問題實在是太簡單了,小c不屑於去解決它。這讓小c的老師憤怒了,他就找了另外乙個問題來問他。

小c的老師給了他乙個長度為n的數字序列,每個位置有乙個整數,他需要小c幫他找到這個數字序列裡面有多少個等差數列。

……這個問題似乎太難了,小c需要你的程式幫他來解決這個問題。

輸入描述 input description

第一行乙個整數n,表示老師給出的數字序列的長度。

第二行有n個整數a[i],表示數字序列每個數字的大小。

輸出描述 output description

輸出只有一行乙個整數,表示這個序列中的等差數列的個數(mod 9901)。

樣例輸入 sample input

51 4 2 3 7

樣例輸出 sample output

資料範圍及提示 data size & hint

對於30%的資料,n <= 100

對於70%的資料,n <= 500

對於100%的資料,n <= 1000;-500 <= a[i] <= 500

/*

f[i][j]表示以i為終點(且i不為起點),差為j的個數

窮舉起點和第二項,然後更新第二項的值。

最後就需要加上n,以為乙個元素也是等差數列。

*/#include

#include

#include

#define n 1007

#define mod 9901

using

namespace

std;

intn,m,d,a[n];

long

long ans,f[n][n<<2

];int

main()

ans=n;

for(int i=1;i<=n;i++)

for(int j=0;j<=2000;j++)

ans=(ans+f[i][j])%mod;

printf(

"%lld\n

",ans);

return0;

return0;

return0;

}

45 等差數列

45 等差數列 問題描述 乙個等差數列是乙個能表示成a,a b,a 2b,a nb n 0,1,2,3,在這個問題中a是乙個非負的整數,b是正整數。寫乙個程式來找出在雙平方數集合s中長度為n的等差數列。雙平方數集合是所有能表示成p2 q2的數的集合。輸入說明 第一行 n 3 n 25 要找的等差數列...

45 等差數列

乙個等差數列是乙個能表示成a,a b,a 2b,a nb n 0,1,2,3,在這個問題中a是乙個非負的整數,b是正整數。寫乙個程式來找出在雙平方數集合s中長度為n的等差數列。雙平方數集合是所有能表示成p2 q2的數的集合。第一行 n 3 n 25 要找的等差數列的長度。第二行 m 1 m 250 ...

45 等差數列

45 等差數列 問題描述 乙個等差數列是乙個能表示成a,a b,a 2b,a nb n 0,1,2,3,在這個問題中a是乙個非負的整數,b是正整數。寫乙個程式來找出在雙平方數集合s中長度為n的等差數列。雙平方數集合是所有能表示成p2 q2的數的集合。輸入說明 第一行 n 3 n 25 要找的等差數列...