藍橋杯模擬題 擺動序列

2021-10-05 04:56:33 字數 971 閱讀 9864

問題描述

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

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

輸入3 4

輸出14

#include

using

namespace std;

int a[

1010][

1010];

int n,m;

/* * * * a[i][j]的意義:

* i&1==0 即i為偶數時,表示第i項小於等於j的方案數

* i&1==1 即i為奇數時,表示第i項大於等於j的方案數

* 先初始化,第一項是奇數項,dp[1][j]=n-j+1; 大於等於j的選擇方案總數

* 從第2項到第m項:

* * 如果i&1==0,偶數項,dp[i][j]表示小於等於j的方案數,不難想出遞推關係:

* dp[i][j]=dp[i-1][j+1]+dp[i][j-1];

* 要先知道dp[i][j-1]所以j從小到大遞推

* * 如果i&1==1,奇數項,要找大於等於j的方案數,遞推關係:

* dp[i][j]=dp[i-1][j-1]+dp[i][j+1]

* 要先求出dp[i][j+1],所以j要從大到小

* * * *最後結果:如果是奇數項即求出第i位大於等於1小於等於n的總方案數,即dp[m][1]

* * * * 如果是偶數項,求出第i位小於等於n的總方案數,即dp[m][n]

*/int

main()

else

} cout<<

((m&1)

?(a[m][1

]):(a[m]

[n])

)

}

藍橋杯 擺動序列

題目 問題描述 如果乙個序列滿足下面的性質,我們就將它稱為擺動序列 1.序列中的所有數都是不大於k的正整數 2.序列中至少有兩個數。3.序列中的數兩兩不相等 4.如果第i 1個數比第i 2個數大,則第i個數比第i 2個數小 如果第i 1個數比第i 2個數小,則第i個數比第i 2個數大。比如,當k 3...

藍橋杯模擬賽 擺動序列 題目 題解

題目 問題描述 如果乙個序列的奇數項都比前一項大,偶數項都比前一項小,則稱為乙個擺動序列。即 a 2i a 2i 小明想知道,長度為 m,每個數都是 1 到 n 之間的正整數的擺動序列一共有多少個。輸入格式 輸入一行包含兩個整數 m,n。輸出格式 輸出乙個整數,表示答案。答案可能很大,請輸出答案除以...

藍橋杯 擺動序列 df

include include int a 100 擺動陣列 int vis 100 int k int ans bool judge int x,int index void dfs int count int main 問題描述 如果乙個序列滿足下面的性質,我們就將它稱為擺動序列 1.序列中的所...