解題筆記(26) 排隊問題

2021-05-27 15:54:11 字數 792 閱讀 4743

問題描述:12個高矮不同的人,排成兩排,每排必須是從矮到高排列,而且第二排比對應的第一排的人高,問排列方式有多少種?

思路:可以用遞迴來解決。假設已按高矮順序編號從0到11,即0號最矮、11號最高,(i, j)表示某個人在佇列中的位置。對於0號只能排在(0, 0),1號可以排在兩個位置(0, 1)和(1, 0)。2號可以排的位置取決於1號的位置,如果1號排在(0, 1),那麼2號可以排在兩個位置(0, 0)和(1, 0)。如果1號排在(1, 0),那麼2號只能排在(0, 1)。

觀察一下,可以得出一下規律:對於i號,如果第一排與第二排的人數一樣,那麼他只能排在第一排;如果第一排的人數大於第二排,那麼他可以排在第一排或者第二排。遞迴終止的條件是第一排或第二排排滿了。

static int totalnum = 0;

//函式功能 : 排隊問題

//函式引數 : firstfree為第1排第1個空餘位置

// secondfree為第2排第1個空餘位置

// num為排隊人數

//返回值 : 無

void inlineproblem(int firstfree, int secondfree, int num)

if(firstfree == secondfree) //第1排人數與第2排人數一樣

else

}

呼叫方式如下:

int main()

{ inlineproblem(0, 0, 12);

cout<

2956 排隊問題

題目描述 description 有n個學生去食堂,可教官規定 必須2人或3人組成一組,求有多少種不同分組的方法。輸入描述 input description 乙個數,n 輸出描述 output description 乙個數,即答案。樣例輸入 sample input 6 樣例輸出 sample ...

2353排隊問題

n個身高不同的小朋友,分別站在編號1 n的格仔裡,n個格仔排成1列。現在我們希望他們能夠按照身高的順序從低到高排成1列。按現在的順序給出n個小朋友的身高,問所有小朋友總共需要移動多少個格仔,才能按照身高從低到高的順序排好隊。注 從格仔3移動到格仔1,需要移動2個格仔。例如 4個小朋友,身高分別是 1...

問題 1163 排隊買票

時間限制 1sec 記憶體限制 128mb 提交 484 解決 199 題目描述 有m個小孩到公園玩,門票是1元。其中n個小孩帶的錢為1元,k個小孩帶的錢為2元。售票員沒有零錢,問這些小孩共有多少種排隊方法,使得售票員總能找得開零錢。注意 兩個拿一元零錢的小孩,他們的位置互換,也算是一種新的排法。m...