計蒜客NOIP2008 動態規劃

2021-10-11 02:27:17 字數 952 閱讀 2814

上體育課的時候,小蠻的老師經常帶著同學們一起做遊戲。這次,老師帶著同學們一起做傳球遊戲。

遊戲規則是這樣的:n 個同學站成乙個圓圈,其中的乙個同學手裡拿著乙個球,當老師吹哨子時開始傳球,每個同學可以把球傳給自己左右的兩個同學中的乙個(左右任意),當老師再次吹哨子時,傳球停止,此時,拿著球沒傳出去的那個同學就是敗者,要給大家表演乙個節目。

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

樣例輸入

3 3樣例輸出

是不是題目看起來字太多了。

我來概括一下:就是說一群小孩子圍在一起,傳乙個球,就問有x個人時,傳y次有多少種方式,傳回這個人的手裡。

解決方法:動態規劃

#include

#include

using

namespace std;

int dp[31]

[31];

// 乙個人通過n次傳回自己手裡,就是他左右兩邊的人的傳n-1次到自己手裡的可能性之和。

// 遞推方程就是 dp[i][j] = dp[i-1][j-1] + dp[i-1][j+1] 這裡的i表示是次數,j表示的是第幾個人

// 這裡是乙個環所以有邊界處理

intsolve

(int count,

int person)

else

if(j==person)

else}}

return dp[count][1

];}int

main()

計蒜客 逃生(基礎動態規劃)

蒜頭君在玩一款逃生的遊戲。在乙個 n times mn m 的矩形地圖上,蒜頭位於其中乙個點。地圖上每個格仔有加血的藥劑,和掉血的火焰,藥劑的藥效不同,火焰的大小也不同,每個格仔上有乙個數字,如果格仔上的數字是正數說明是乙個藥劑代表增加的生命值,如果是負數說明是火焰代表失去的生命值。蒜頭初始化有 v...

計蒜客 劃分整數(動態規劃)

劃分整數 蒜頭君特別喜歡數學。今天,蒜頭君突發奇想 如果想要把乙個正整數 nnn 分解成不多於 kkk 個正整數相加的形式,那麼一共有多少種分解的方式呢?蒜頭君覺得這個問題實在是太難了,於是他想讓你幫幫忙。輸入格式 共一行,包含兩個整數 n 1 n 300 n 1 leq n leq 300 n 1...

動態規劃入門 NOIP2008 傳紙條

小淵和小軒是好朋友也是同班同學,他們在一起總有談不完的話題。一次素質拓展活動中,班上同學安排做成乙個m行n列的矩陣,而小淵和小軒被安排在矩陣對角線的兩端,因此,他們就無法直接交談了。幸運的是,他們可以通過傳紙條來進行交流。紙條要經由許多同學傳到對方手裡,小淵坐在矩陣的左上角,座標 1,1 小軒坐在矩...