BZOJ 2822 樹屋階梯

2022-04-29 09:06:09 字數 1143 閱讀 1126

暑假期間,小龍報名了乙個模擬野外生存作戰訓練班來鍛鍊體魄,訓練的第乙個晚上,教官就給他們出了個難題。由於地上露營濕氣重,必須選擇在高處的樹屋露營。小龍分配的樹屋建立在一顆高度為n+1尺(n為正整數)的大樹上,正當他發愁怎麼爬上去的時候,發現旁邊堆滿了一些空心四方鋼材(如圖1.1),經過觀察和測量,這些鋼材截面的寬和高大小不一,但都是1尺的整數倍,教官命令隊員們每人選取n個空心鋼材來搭建乙個總高度為n尺的階梯來進入樹屋,該階梯每一步台階的高度為1尺,寬度也為1尺。如果這些鋼材有各種尺寸,且每種尺寸數量充足,那麼小龍可以有多少種搭建方法?(注:為了避免夜裡踏空,鋼材空心的一面絕對不可以向上。)

以樹屋高度為4尺、階梯高度n=3尺為例,小龍一共有如圖1.2所示的5種

搭 建方法:

乙個正整數n(1≤n≤500),表示階梯的高度

乙個正整數,表示搭建方法的個數。(注:搭建方法個數可能很大。)35

1≤n≤500

分析:卡特蘭數,公式為h(n) = c(2n,n)/(n+1)。

開個高精度500就可以過了。

n<=50000的做法:分解成質數,把質數乘起來。

**:

1 #include 2

3struct

bignumber417

}1819void times (const

intx)

2030 n[i] += t[i] *x;

31if (n[i] > 9)32

36}37while (n[s] > 0)38

44 s++;45}

46}4748

void

print ()

4954

} bn;

5556

int n, n2, m, cnt, f[110000], k[110000

];57

58int

main ()

5976}77

}78 bn.set (1

);79

for (int i = 0; i <= n2; i++)

80for (int j = 0; j < k[i]; j++)

81bn.times (i);

82bn.print ();

83 }

AHOI2012 BZOJ2822 樹屋階梯

description 暑假期間,小龍報名了乙個模擬野外生存作戰訓練班來鍛鍊體魄,訓練的第乙個晚上,教官就給他們出了個難題。由於地上露營濕氣重,必須選擇在高處的樹屋露營。小龍分配的樹屋建立在一顆高度為n 1尺 n為正整數 的大樹上,正當他發愁怎麼爬上去的時候,發現旁邊堆滿了一些空心四方鋼材 如圖1....

BZOJ2822 AHOI2012 樹屋階梯

設f i 表示i個階梯的方案數,考慮你第乙個踩上去的階梯,他的高度一定為1,可以取1 i的長度,若其長度為j,搭在這一塊上邊的部分的方案數為f j 1 不在上邊部分的方案與f i j 一一對應 砍掉最底下一行 於是就是卡特蘭數,質因數分解之後高精即可 include include include ...

BZOJ2822 AHOI2012 樹屋階梯

標籤 數學,卡特蘭數,高精度 description 暑假期間,小龍報名了乙個模擬野外生存作戰訓練班來鍛鍊體魄,訓練的第乙個晚上,教官就給他們出了個難題。由於地上露營濕氣重,必須選擇在高處的樹屋露營。小龍分配的樹屋建立在一顆高度為n 1尺 n為正整數 的大樹上,正當他發愁怎麼爬上去的時候,發現旁邊堆...