問題描述
如果乙個序列的奇數項都比前一項大,偶數項都比前一項小,則稱為乙個擺動序列。即 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.序列中的所...