卡特蘭數!
至於為什麼是卡特蘭數,就稍微說那麼一兩句吧
對於乙個高度為\(i\)的階梯,我們可以在左上角填乙個高度為\(k\)的階梯,右下角填乙個高度為\(i-1-k\)的階梯剩下的我們用乙個大的長方形填上就可以啦
比如這個樣子
之後還需要高精,但是為了簡單好寫,這裡可以分解質因數,之後就變成另乙個單精度乘高精了
**
#include#include#include#include#define ll long long
#define re register
#define maxn 1005
inline int read()
int n,f[maxn],p[maxn];
int to[maxn],num[maxn];
int a[10005];
int l;
inline void mul(int x)
l=now-1;
}int main()
} for(re int i=2;i<=2*n;i++)
if(now!=1) num[to[now]]++;
} l=1,a[1]=1;
for(re int i=2;i<=n;i++)
int up=std::sqrt(i);
int now=i;
for(re int j=1;j<=p[0]&&p[j]<=up;j++)
if(now!=1) num[to[now]]-=2;
} int now=n+1;
int up=std::sqrt(n+1);
for(re int j=1;j<=p[0]&&p[j]<=up;j++)
if(now!=1) num[to[now]]--;
for(re int i=1;i<=p[0];i++)
while(num[i]) mul(p[i]),num[i]--;
for(re int i=l;i;i--)
printf("%d",a[i]);
return 0;
}
AHOI2012 樹屋階梯
有無窮多的任意尺寸矩形,搭建乙個 n 級正階梯有多少種方案?任意大小為 i 的階梯,都可以由左上角放一塊大小為 j 的,右下角放一塊大小為 i j 1 的來構成,每一塊內部遞迴填充,對應 catalan 數 實現需要高精乘單精,高精除單精 include using namespace std co...
AHOI2012 樹屋階梯 題解(卡特蘭數)
暑假期間,小龍報名了乙個模擬野外生存作戰訓練班來鍛鍊體魄,訓練的第乙個晚上,教官就給他們出了個難題。由於地上露營濕氣重,必須選擇在高處的樹屋露營。小龍分配的樹屋建立在一顆高度為n 1尺 n為正整數 的大樹上,正當他發愁怎麼爬上去的時候,發現旁邊堆滿了一些空心四方鋼材 如圖1.1 經過觀察和測量,這些...
2822 AHOI2012 樹屋階梯
time limit 1 sec memory limit 128 mb submit 729 solved 424 submit status discuss 暑假期間,小龍報名了乙個模擬野外生存作戰訓練班來鍛鍊體魄,訓練的第 乙個晚上,教官就給他們出了個難題。由於地上露營濕氣重,必須選擇在高處的...