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