十一屆藍橋模擬 擺動序列

2021-10-08 17:00:31 字數 1716 閱讀 9759

問題描述

如果乙個序列的奇數項都比前一項大,偶數項都比前一項小,則稱為乙個擺動序列。

即 a[2i]a[2i]。

小明想知道,長度為 m,每個數都是 1 到 n 之間的正整數的擺動序列一共有多少個。

輸入格式

輸入一行包含兩個整數 m,n。

輸出格式

輸出乙個整數,表示答案。答案可能很大,請輸出答案除以10000的餘數。

樣例輸入

3 4樣例輸出

樣例說明

以下是符合要求的擺動序列:

2 1 2

2 1 3

2 1 4

3 1 2

3 1 3

3 1 4

3 2 3

3 2 4

4 1 2

4 1 3

4 1 4

4 2 3

4 2 4

4 3 4

評測用例規模與約定

對於 20% 的評測用例,1 <= n, m <= 5;

對於 50% 的評測用例,1 <= n, m <= 10;

對於 80% 的評測用例,1 <= n, m <= 100;

對於所有評測用例,1 <= n, m <= 1000。

#include

using

namespace std;

int m,n;

int ans =0;

int db[

1001][

1001];

/*普通動態規劃 (80%)

動態規劃:

db[i][j] 表示:第 i 位選擇 j 的方案

遞推方法:

奇數: db[i][j] = db[i-1][1]+ ... + db[i-1][j-1];

偶數: db[i][j] = db[i-1][j+1]+ ... + db[i-1][k];

時間複雜度:o(n3)

*/void

db1(

) db[i]

[j]= temp;

}else

db[i]

[j]= temp;}}

}for

(int i =

1; i <= n; i++

) ans = ans + db[m]

[i];}/*

動態規劃優化方案(全分)

優化:時間複雜度為:o(n2)

減少了填表過程中每次的累加

動態規劃:

db[i][j] 表示奇數:第 i 位選擇 j 時有 大於 j + 等於 j 種方案

表示偶數:第 i 位選擇 j 時有 小於 j + 等於 j 種方案

遞推方法:

奇數: db[i][j] = db[i-1][j-1] + db[i][j+1];

偶數: db[i][j] = db[i-1][j+1] + db[i][j-1];

初始化:db[1][j] = n - i + 1;

難點: 推導出遞推方法 !!!!!

*/void

db2()}

else}}

ans = m&

1? db[m][1

]: db[m]

[n];

}int

main

(int argc,

char

** ar**)

第十一屆藍橋杯

問題描述 小藍要為一條街的住戶製作門牌號。這條街一共有 2020 位住戶,門牌號從 1 到 2020 編號。小藍製作門牌的方法是先製作 0 到 9 這幾個數字字元,最後根據需要將字 符貼上到門牌上,例如門牌 1017 需要依次貼上字元 1 0 1 7,即需要 1 個 字元 0,2 個字元 1,1 個...

第十一屆藍橋杯模擬賽 反倍數

問題描述 給定三個整數 a,b,c 如果乙個整數既不是 a 的整數倍也不是 b 的整數倍還不是 c 的整數倍,則這個數稱為反倍數。請問在1 至 n 中有多少個反倍數。輸入格式 輸入的第一行包含乙個整數 n。第二行包含三個整數 a,b,c,相鄰兩個數之間用乙個空格分隔。樣例輸出 輸出一行包含乙個整數,...

第十一屆藍橋杯模擬賽 凱撒密碼

問題描述 給定乙個單詞,請使用凱撒密碼將這個單詞加密。凱撒密碼是一種替換加密的技術,單詞中的所有字母都在字母表上向後偏移 3 位後被替換成密文。即 a 變為 d,b 變為 e,w 變為 z,x 變為 a,y 變為 b,z 變為 c。例如,lanqiao 會變成 odqtldr。輸入格式 輸入一行,包...