目錄
題目 題解
工作空閒之餘,蒜頭君經常帶著同事們做遊戲,最近蒜頭君發明了乙個好玩的新遊戲:知識點:dpn 位同事圍成乙個圈,同事
a 手裡拿著乙個兔妮妮的娃娃。蒜頭君喊遊戲開始,每位手裡拿著娃娃的同事可以選擇將娃娃傳給左邊或者右邊的同學,當蒜頭君喊遊戲結束時,停止傳娃娃。此時手裡拿著娃娃的同事即是敗者。
玩了幾輪之後,蒜頭君想到乙個問題:有多少種不同的方法,使得從同事
a 開始傳娃娃,傳了
m 次之後又回到了同事
a 手裡。兩種方法,如果接娃娃的同事不同,或者接娃娃的順序不同均視為不同的方法。例如
1−>2−>3−>1
和1−>3−>2−>1
是兩種不同的方法。
輸入格式
輸入一行,輸入兩個整數n,
m(3≤
n≤30,1≤
m≤30)
,表示一共有
n 位同事一起遊戲,一共傳
m 次娃娃。
輸出格式
輸出一行,輸出乙個整數,表示一共有多少種不同的傳娃娃方法。
輸出時每行末尾的多餘空格,不影響答案正確性
要求使用「檔案輸入輸出」的方式解題,輸入檔案為
game.in
,輸出檔案為
game.out
樣例輸入
3 3
樣例輸出2
分析:我們首先用dp[i][j]表示第i次傳到第j個人的總次數,然後得出dp狀態轉移方程:dp[i][j]=dp[i-1][j-1]+dp[i-1][j+1];,第i次傳到j這個人的次數=第i-1次傳到j-1這個人和j+1這個人,注意第0次傳到第乙個人的次數為1,要預判的,dp中還有特殊情況:1這個人和n這個人的次數計算,畢竟題意中這是乙個環,但陣列是線性的。
**:
#include#includeusing namespace std;
const int noip=50;//祝考noip的人一切順利(例如我)
int dp[noip][noip];//dp[i][j]表示第i次傳到第j個人的總次數
int main()
if (j==n)
dp[i][j]=dp[i-1][j-1]+dp[i-1][j+1];//從兩方的人傳到此人手裡
} }cout
}
計蒜客習題 蒜頭君的新遊戲
工作空閒之餘,蒜頭君經常帶著同事們做遊戲,最近蒜頭君發明了乙個好玩的新遊戲 n 位同事圍成乙個圈,同事 a 手裡拿著乙個兔妮妮的娃娃。蒜頭君喊遊戲開始,每位手裡拿著娃娃的同事可以選擇將娃娃傳給左邊或者右邊的同學,當蒜頭君喊遊戲結束時,停止傳娃娃。此時手裡拿著娃娃的同事即是敗者。玩了幾輪之後,蒜頭君想...
蒜頭君面試 計蒜客
蒜頭君來蒜廠面試的時候,曾經遇到這樣乙個面試題 給定 n nn 個整數,求裡面出現次數最多的數,如果有多個重複出現的數,求出值最大的乙個。當時可算是給蒜頭君難住了。現在蒜頭君來考考你。輸入格式 第一行輸入乙個整數 n 1 n 100000 n 1 le n le 100000 n 1 n 1000 ...
計蒜客 蒜頭君倒水
問題描述 蒜頭君倒了 2 杯熱水在杯子裡面,第一杯裡面有 a 毫公升,第二杯裡面有 b 毫公升。水太熱了,蒜頭君決定通過輪流倒水的方式來讓水冷下來。每次倒水蒜頭君把第一杯的 x 的水倒入第二杯,把第二杯的 y 的水倒入第一杯 蒜頭君有奇特的方法,能讓這一過程是同是發生的,沒有先後之分 蒜頭君一直重複...