動態規劃 擊鼓傳花

2021-08-08 09:01:55 字數 1123 閱讀 1846

擊鼓傳花

題目描述

學校聯歡晚會的時候,為了使每乙個同學都能參與進來,主持人常常會帶著同學們玩擊鼓傳花的遊戲。遊戲規則是這樣的:n個同學坐著圍成乙個圓圈,指定乙個同學手裡拿著一束花,主持人在旁邊背對著大家開始擊鼓,鼓聲開始之後拿著花的同學開始傳花,每個同學都可以把花傳給自己左右的兩個同學中的乙個(左右任意),當主持人停止擊鼓時,傳花停止,此時,正拿著花沒傳出去的那個同學就要給大家表演乙個節目。

聰明的小賽提出乙個有趣的問題:有多少種不同的方法可以使得從小賽手裡開始傳的花,傳了m次以後,又回到小賽手裡。對於傳遞的方法當且僅當這兩種方法中,接到花的同學按接球順序組成的序列是不同的,才視作兩種傳花的方法不同。比如有3個同學1號、2號、3號,並假設小賽為1號,花傳了3次回到小賽手裡的方式有1->2->3->1和1->3->2->1,共2種。

輸入輸入共一行,有兩個用空格隔開的整數n,m(3<=n<=30,1<=m<=30)

樣例輸入

3 3

輸出輸出共一行,有乙個整數,表示符合題意的方法數

樣例輸出2

時間限制

c/c++語言:1000ms

其它語言:3000ms

記憶體限制

c/c++語言:65536kb

其它語言:589824kb

// 初始化:建立二維陣列status[m][n],初始化status[0][0]=0, status[0][1]=1, status[0][n-1]=1, ... =0

// 狀態的確定:status[x][y]

// 假設小賽是第0個同學,旁邊則為第1個和第n-1個,設狀態為status[x][y]:x+1次傳花後以第y位同學結束的序列有多少種

// 狀態轉移方程:

// status[x][y] = status[x-1][(y+1)%n] + status[x-1][(y+n-1)%n]

// 結果為status[m-1][0]

#include

#include

using namespace std;

int main()

}cout << status[m - 1][0];

return 0;

}

擊鼓傳花 Python

有多少種不同的方法可以使得從小賽手裡開始傳的花,傳了m次以後,又回到小賽手裡。對於傳遞的方法當且僅當這兩種方法中,接到花的同學按接球順序組成的序列是不同的,才視作兩種傳花的方法不同。比如有3個同學1號 2號 3號,並假設小賽為1號,花傳了3次回到小賽手裡的方式有1 2 3 1和1 3 2 1,共2種...

coro學習 擊鼓傳花

這個是協程的經典例子。之前有一篇erlang和stackless比較的文章有詳細介紹。用perl的coro實現了一下。程式沒有很好地優化架構,不過便於閱讀。usr bin env perl coro測試程式testcoro11.pl perl版的擊鼓傳花 erlang和stackless的經典例子 ...

題目 《擊鼓傳花》

description 設有n個人圍成乙個圈,每人手裡都握著乙個令牌寫明乙個數字 隨機生成的 從第乙個人開始玩 擊鼓傳花 遊戲,第乙個擊的次數為其令牌上寫明的數字數 假設為m1 第m1個人出列。下次再從第m1 1個人開始新的 擊鼓傳花 擊的次數也為其令牌上寫明的次數,等於該次數的人出列。重複以上過程...