SDOI2010 地精部落

2022-03-16 23:58:07 字數 856 閱讀 8984

求1~n的全排列數目,使得對於\(i\geq 3\),\(a_,a_\)的大小關係與\(a_,a_\)的大小關係不同

題目還有另外一種格式:求一種全排列,使得這個排列要麼滿足奇數項的高度比相鄰位置都大, 要麼滿足偶數項的高度比相鄰位置都大.

設\(dp_\)表示用了前\(i\)個數字,\(a_1 = j\)且\(a_1 > a_2\)時的方案數;

有乙個神奇的性質:\(j-1\)和\(j\)不相鄰時,交換兩數可以形成一種新的方案(比較顯然),所以由\(dp_\)可以轉移到\(dp_\),即對於當前任意乙個排列\(j.......j-1.......\),都有之前的乙個排列\(j-1.........j.......\)與之對應

如果\(j-1\)和\(j\)相鄰,對於當前任意乙個排列\(j,j-1.........\),都可以用之前的乙個排列\(j-1..........\)前面加個\(j\)得到(且此時\(j-1\)比後面的數小),即求\(i-1\)個數的排列數,由於這種排列不符合定義(\(a_1>a_2\)),需要做個變換:將每個數\(x\)變成\(i-x\),如序列1,2,4,3變成4,3,1,2,\(j-1\)變成了\(i-j+1\),即\(dp_\)可以轉移到\(dp_\)

#include#define n 5005

using namespace std;

typedef long long ll;

int n,mod;

ll f[2][n];

int main() }

ll ans=0;

for(int i=1;i<=n;++i) ans=(ans+f[now][i])%mod;

cout

}

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

SDOI2010 地精部落

傳說很久以前,大地上居住著一種神秘的生物 地精。地精喜歡住在連綿不絕的山脈中。具體地說,一座長度為n的山脈h可分為從左到右的n段,每段有乙個 b u 獨一無二 u b 的高度hi,其中hi是1到n之間的正整數。如果一段山脈比所有與它相鄰的山脈都高,則這段山脈是乙個山峰。位於邊緣的山脈只有一段相鄰的山...