BZOJ1925地精部落

來源:互聯網
上載者:User

標籤:興趣   題解   枚舉   一段   記憶體   組合   begin   工作   第一時間   

傳說很久以前,大地上居住著一種神秘的生物:地精。 地精喜歡住在連綿不絕的山脈中。具體地說,一座長度為 N 的山脈 H可分 為從左至右的 N 段,每段有一個獨一無二的高度 Hi,其中Hi是1到N 之間的正 整數。 如果一段山脈比所有與它相鄰的山脈都高,則這段山脈是一個山峰。位於邊 緣的山脈只有一段相鄰的山脈,其他都有兩段(即左邊和右邊)。 類似地,如果一段山脈比所有它相鄰的山脈都低,則這段山脈是一個山穀。 地精們有一個共同的愛好——飲酒,酒館可以設立在山穀之中。地精的酒館 不論白天黑夜總是人聲鼎沸,地精美酒的香味可以飄到方圓數裡的地方。 地精還是一種非常警覺的生物,他們在每座山峰上都可以設立瞭望台,並輪 流擔當瞭望工作,以確保在第一時間得知外敵的入侵。 地精們希望這N 段山脈每段都可以修建瞭望台或酒館的其中之一,只有滿足 這個條件的整座山脈才可能有地精居住。 現在你希望知道,長度為N 的可能有地精居住的山脈有多少種。兩座山脈A 和B不同若且唯若存在一個 i,使得 Ai≠Bi。由於這個數目可能很大,你只對它 除以P的餘數感興趣。

 

題解:

易證符合條件長度為n的山脈,開頭為峰與開頭為穀的種數是相同的。這樣,我們可以取F[n]的一半來表示某端點為山峰或山穀的方案數。

在求F[n]時,可以考慮在長度為n-1的山脈中插入高度為n的山峰,枚舉插入的位置,則兩邊離散化後都變成了子問題,可以進行動態規劃。因為兩邊的組成有多種情況,乘上一個組合數即可。

使用楊輝三角求組合數。注意記憶體限制,需使用滾動數組。

 

代碼:

var  i,j,k,l,n,m,p:longint;  a:array[0..4201]of int64;  c:array[1..2,0..4201]of longint;begin  readln(n,p);  c[1,1]:=1; c[1,0]:=1;  a[1]:=1; a[0]:=1;  for i:=2 to n do  begin    for j:=1 to i do    if j mod 2=1 then    a[i]:=(a[i]+(a[j-1]*c[1,j-1]mod p)*a[i-j])mod p;    c[2,0]:=1; c[2,i]:=1;    for j:=1 to i-1 do    c[2,j]:=(c[1,j]+c[1,j-1])mod p;    for j:=1 to i do c[1,j]:=c[2,j];  end;  writeln(a[n]*2 mod p);end.

BZOJ1925地精部落

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.