藍橋杯 機械人塔

2021-08-19 17:40:58 字數 1986 閱讀 5115

x星球的機械人表演拉拉隊有兩種服裝,a和b。 他們這次表演的是搭機械人塔。

類似:

a

b ba b a

aa b b

b b b a b

a b a b b a

你的任務是幫助拉拉隊計算一下,在給定a與b的人數時,可以組成多少種花樣的塔。

輸入一行兩個整數 m 和 n,空格分開(0<m,n<500),分別表示a、b的人數,保證人數合理性。

要求輸出乙個整數,表示可以產生的花樣種數。

例如: 使用者輸入: 1 2

程式應該輸出: 3

再例如:; 使用者輸入: 3 3

程式應該輸出: 4

資源約定: 峰值記憶體消耗 < 256m cpu消耗 < 1000ms

請嚴格按要求輸出,不要畫蛇添足地列印類似:「請您輸入…」 的多餘內容。

所有**放在同乙個原始檔中,除錯通過後,拷貝提交該原始碼。

注意: main函式需要返回0 注意: 只使用ansi c/ansi c++ 標準,不要呼叫依賴於編譯環境或作業系統的特殊函式。 注意:

所有依賴的函式必須明確地在原始檔中 #include , 不能通過工程設定而省略常用標頭檔案。

提交時,注意選擇所期望的編譯器型別。

網上關於這道題這種的題解不多,然後因為藍橋練習系統裡沒找到這道題所以以下**未ac,算是記錄一下思路

然後這個題感覺有點理解性的歧義,是在盡可能最大的三角堆的前提下還是說小堆小堆的組合也算?

不是很清楚,不過的**是在最大的三角堆下形成的排列

這種塔型很容易就想到滿二叉樹,而完全二叉樹有乙個很好的特性就是,父節點是i,則左兒子是2i,右兒子是(2i+1)

可以通過這個來檢驗合法性或者填元素

塔作為乙個三角堆,同時也可以向下分成多個三角堆,以下**是從三角形的頭頭開始往下填元素。

#include#include#include#include#include#include#include#include#include#includeusing namespace std;

int num=0;//記錄方案數

char list[1005];//用來儲存數字

//深度優先的試探

void dfs(char top,int anum,int bnum,int cur,int maxs,int& size){//top表示乙個小三角的頂端元素 ,anum和bnum分別為a和b的剩餘個數 ,cur表示當前座標,maxs表示最大能填的元素個數同時也算陣列的假定邊界,size表示已填的元素個數

//此處的size用的是引用,因為當程式結束下層遞迴回退回來是,size不應該回退,畢竟下面的元素已經填充了,不過這裡也可以吧size放到函式的外面,而不用作為乙個引數

if(bnum<0||anum<0||cur>maxs)return;//當a或b元素小於0或者試探的位置越界時就不再往下試探

list[cur]=top;//將元素填充到乙個位置

size++;//因此個數就加了乙個

if(size==maxs){//如果元素個數等於最大元素數表示這個時候已經填完,一種排列完成

num++;

for(int i=1;i<=maxs;i++)cout<>m>>n;

string line="";

int h =log(m+n+1)/log(2);//計算最大層數

int maxs = pow(2,h)-1;//計算此層數下的元素值

int i=0;

dfs('a',m-1,n,1,maxs,i);//頂底為a時的排列數

i=0;

dfs('b',m,n-1,1,maxs,i);//頂底為b時的排列數

cout<

除題目給出的測試用例外

比如15   1 --> 1 //像這樣(anum>15,bnum<2)的情況下,可以很明顯的看出這個時候只有一種組合就是全a,不過網上很多答案對這類輸入的結果0

除此外其他的也不好驗證了,畢竟3層之後的組合我也推不出來了......

藍橋杯 機械人塔(dfs)

題目描述 x星球的機械人表演拉拉隊有兩種服裝,a和b。他們這次表演的是搭機械人塔。類似 a b ba b a a a b b b b b a b a b a b b a 隊內的組塔規則是 a 只能站在 aa 或 bb 的肩上。b 只能站在 ab 或 ba 的肩上。你的任務是幫助拉拉隊計算一下,在給定...

機械人塔 藍橋

題目描述 x星球的機械人表演拉拉隊有兩種服裝,a和b。他們這次表演的是搭機械人塔。類似 a b ba b a a a b b b b b a b a b a b b a 隊內的組塔規則是 a 只能站在 aa 或 bb 的肩上。b 只能站在 ab 或 ba 的肩上。你的任務是幫助拉拉隊計算一下,在給定...

機械人塔(藍橋)

特別好的題解 機械人塔 x星球的機械人表演拉拉隊有兩種服裝,a和b。他們這次表演的是搭機械人塔。類似 a b ba b a a a b b b b b a b a b a b b a 隊內的組塔規則是 a 只能站在 aa 或 bb 的肩上。b 只能站在 ab 或 ba 的肩上。你的任務是幫助拉拉隊計...