SDOI2010 地精部落

2022-05-12 00:48:09 字數 2788 閱讀 7804

傳說很久以前,大地上居住著一種神秘的生物:地精。

地精喜歡住在連綿不絕的山脈中。具體地說,一座長度為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 #include5

using

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 我覺得...