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