點我進入題目
題目大意:n個小孩圍一圈傳球,每個人可以給左邊的人或右邊的人傳球,1號小孩開始,一共傳m次,請問有多少種可能的路徑使球回到1號小孩。
輸入輸出:輸入n,m,輸出路徑的數量。
資料範圍:40% 3<=n<=30 1<=m<=20 100% 3<=n<=30 1<=m<=30
我是這麼想的:膜擬過程,從1號小孩開始dfs,然後加乙個記憶化搜尋節省時間。
dfs(num,tim)表示球傳到第num個小孩,已經傳過tim次時候,d[num][tim]表示球傳到第num個小孩,已經傳過tim次時候已經記錄過的可能傳到1號小孩的次數。
剛開始的時候預設1號小孩只把球傳給2號小孩,因為傳給n號小孩和傳給2號小孩的情況是對稱的,所以乘以2,理論上節省一半時間(實際上由於記憶化搜尋,節省不了多少時間)
**如下:
/*p1057 傳球遊戲
*/#include #include using namespace std;
int n,m;
int d[31][31];
int search(int num,int tim)
else if(d[num][tim]!=-1)return d[num][tim];
else return d[num][tim]=search(num==n?1:num+1,tim+1)+search(num==1?n:num-1,tim+1);
}int main()
洛谷 P1057 傳球遊戲
題目描述 上體育課的時候,小蠻的老師經常帶著同學們一起做遊戲。這次,老師帶著同學們一起做傳球遊戲。遊戲規則是這樣的 n個同學站成乙個圓圈,其中的乙個同學手裡拿著乙個球,當老師吹哨子時開始傳球,每個同學可以把球傳給自己左右的兩個同學中的乙個 左右任意 當老師在此吹哨子時,傳球停止,此時,拿著球沒有傳出...
洛谷 P1057 傳球遊戲
題目描述 上體育課的時候,小蠻的老師經常帶著同學們一起做遊戲。這次,老師帶著同學們一起做傳球遊戲。遊戲規則是這樣的 n個同學站成乙個圓圈,其中的乙個同學手裡拿著乙個球,當老師吹哨子時開始傳球,每個同學可以把球傳給自己左右的兩個同學中的乙個 左右任意 當老師在此吹哨子時,傳球停止,此時,拿著球沒有傳出...
P1057 傳球遊戲 洛谷
上體育課的時候,小蠻的老師經常帶著同學們一起做遊戲。這次,老師帶著同學們一起做傳球遊戲。遊戲規則是這樣的 n個同學站成乙個圓圈,其中的乙個同學手裡拿著乙個球,當老師吹哨子時開始傳球,每個同學可以把球傳給自己左右的兩個同學中的乙個 左右任意 當老師在此吹哨子時,傳球停止,此時,拿著球沒有傳出去的那個同...