傳說很久以前,大地上居住著一種神秘的生物:地精。
地精喜歡住在連綿不絕的山脈中。具體地說,一座長度為n的山脈h可分為從左到右的n段,每段有乙個[b][u]獨一無二[/u][/b]的高度hi,其中hi是1到n之間的正整數。
如果一段山脈比所有與它相鄰的山脈都高,則這段山脈是乙個山峰。位於邊緣的山脈只有一段相鄰的山脈,其他都有兩段(即左邊和右邊)。
類似地,如果一段山脈比所有它相鄰的山脈都低,則這段山脈是乙個山谷。
地精們有乙個共同的愛好——飲酒,酒館可以設立在山谷之中。地精的酒館不論白天黑夜總是人聲鼎沸,地精美酒的香味可以飄到方圓數里的地方。
地精還是一種非常警覺的生物,他們在每座山峰上都可以設立瞭望台,並輪流擔當瞭望工作,以確保在第一時間得知外敵的入侵。
地精們希望這n段山脈每段都可以修建瞭望台或酒館的其中之一,只有滿足這個條件的整座山脈才可能有地精居住。
現在你希望知道,長度為n的可能有地精居住的山脈有多少種。兩座山脈a和b不同當且僅當存在乙個i,使得ai≠bi。由於這個數目可能很大,你只對它除以p的餘數感興趣。
輸入格式:
輸入檔案goblin.in僅含一行,兩個正整數n, p。
輸出格式:
輸出檔案goblin.out僅含一行,乙個非負整數,表示你所求的答案對p取餘之後的結果。
輸入樣例#1:
4 7
輸出樣例#1:
3
說明:共有10種可能的山脈,它們是:
1[u]3[/u]2[u]4[/u] 1[u]4[/u]2[u]3[/u] [u]2[/u]1[u]4[/u]3 2[u]3[/u]1[u]4[/u] 2[u]4[/u]1[u]3[/u]
[u]3[/u]1[u]4[/u]2 [u]3[/u]2[u]4[/u]1 3[u]4[/u]1[u]2[/u] [u]4[/u]1[u]3[/u]2 [u]4[/u]2[u]3[/u]1
其中加下劃線的數字表示可以設立瞭望台的山峰,其他表示可以設立酒館的山谷。
【資料規模和約定】
對於20%的資料,滿足n≤10;
對於40%的資料,滿足n≤18;
對於70%的資料,滿足n≤550;
對於100%的資料,滿足3≤n≤4200,p≤109。
求波動序列的個數
首先,了解波動序列的對稱性
序列如果為 1 4 2 5 3
對稱序列為 5 2 4 1 3
如果原序列開始遞減,那麼同n+1減每個數,就變成了遞減序列的對稱遞增序列
所以我們只需要求遞增序列,乘2就是總個數
設 f [i] [j] 為 排列 [ 1 , i ] 中開頭為 j 的且第一段上公升的方案數
這個方案數可以遞推而來
根據引理,
如果j 和 j-1 不相鄰 , 把抖動序列中的 j 和 j-1 交換仍然得到乙個抖動序列,而且是一一對應的
或者j 和 j-1 相鄰 ,這部分方案數來自於 f [ i-1 , i-j+1]
去掉 j ,則區間變為[1,j-1]並[j+1,i]
把[j+1,i]下移一位,則變為[1,i-1],那麼只要再求出這部分第一段下降的方案數即可
根據 引理3, 求出f[i-1][(i-1)-(j-1)+1]加上即可
最後*2
是因為我們求的是第一部分為上公升的
下降只需引理3一遍就可以
則方程 f[i][j]=f[i][j-1]+f[i-1][i-j+1];
再給出一種更易懂的方法:
f[i][0/1]i表示最高位的數字,0表示開始是上公升,1表示開始是下降。
為什麼會推出這個?
1、因為所謂抖動序列和每個數的具體值沒有關係,只與它的大小有關係,
2、在下乙個迴圈中,列舉開頭數字,所以只和上一種情況的最高位有關,在數字依次遞增的時候迴圈開頭的每個情況即可。
例: 若為1、 2、 3、 4、 5:
開始是2, 後面是1、 3、 4、 5,分別對應4個數時的1 、2、 3、 4;
轉移條件即為上一次遞推 <2 上公升 作為最高位為 2 的下降方案數
上一次遞推 >=2 下降 作為最高位為 2 的上公升方案數
在搞上字首和+字尾和優化,減掉一維 就可以n^2出解
1 #include2 #include3 #include4 #include5using
namespace
std;
6long
long ans,f[2][5001];7
intn,mod;
8int
main()
9 19
for (i=1;i<=n;i++)
2023 cout<<(ans*2)%mod;
24 }
SDOI2010 地精部落
求1 n的全排列數目,使得對於 i geq 3 a a 的大小關係與 a a 的大小關係不同 題目還有另外一種格式 求一種全排列,使得這個排列要麼滿足奇數項的高度比相鄰位置都大,要麼滿足偶數項的高度比相鄰位置都大.設 dp 表示用了前 i 個數字,a 1 j 且 a 1 a 2 時的方案數 有乙個神...
SDOI2010 地精部落
這道題是一道 dp 題,思維難度比較大。題意 先定義波形陣列 滿足當 i 全為奇數或偶數時,a i a i 1 且 a i a i 1 求 n 的全排列中有多少個符合波形陣列。我們記錄狀態為 f i j 0 1 i 為剩下 i 個數,j 表示有 j 1 個數小於剛剛選擇的數,當第 3 個下標為 0 ...
SDOI2010 地精部落
sdoi2010 地精部落 僅含一行,兩個正整數 n,p。僅含一行,乙個非負整數,表示你所求的答案對p取餘 之後的結果。4 7對於 20 的資料,滿足 n 10 對於 40 的資料,滿足 n 18 對於 70 的資料,滿足 n 550 對於 100 的資料,滿足 3 n 4200,p 109 我覺得...