传球游戏【DP】
傳球游戲傳球游戲傳球游戲
題目描述
上體育課的時候,小蠻的老師經(jīng)常帶著同學(xué)們一起做游戲。這次,老師帶著同學(xué)們一起做傳球游戲。
游戲規(guī)則是這樣的:n個同學(xué)站成一個圓圈,其中的一個同學(xué)手里拿著一個球,當(dāng)老師吹哨子時開始傳球,每個同學(xué)可以把球傳給自己左右的兩個同學(xué)中的一個(左右任意),當(dāng)老師再次吹哨子時,傳球停止,此時,拿著球沒傳出去的那個同學(xué)就是敗者,要給大家表演一個節(jié)目。
聰明的小蠻提出一個有趣的問題:有多少種不同的傳球方法可以使得從小蠻手里開始傳的球,傳了m次以后,又回到小蠻手里。兩種傳球的方法被視作不同的方法,當(dāng)且僅當(dāng)這兩種方法中,接到球的同學(xué)按接球順序組成的序列是不同的。比如有3個同學(xué)1號、2號、3號,并假設(shè)小蠻為1號,球傳了3次回到小蠻手里的方式有1->2->3->1和1->3->2->1,共2種。
輸入
共一行,有兩個用空格隔開的整數(shù)n,m(3<=n<=30,1<=m<=30)。
輸出
t共一行,有一個整數(shù),表示符合題意的方法數(shù)。
輸入樣例
3 3
輸出樣例
2
解題思路:
用a[i][j]來代表傳第i次,傳到j(luò)手中的種數(shù)
{a[i][1]=a[i?1][2]+a[i?1][n]a[i][j]=a[i?1][j?1]+a[i?1][j+1]a[i][n]=a[i?1][1]+a[i?1][n]\left\{\begin{matrix} a[i][1]=a[i-1][2]+a[i-1][n]\\ a[i][j]=a[i-1][j-1]+a[i-1][j+1]\\ a[i][n]=a[i-1][1]+a[i-1][n] \end{matrix}\right.????a[i][1]=a[i?1][2]+a[i?1][n]a[i][j]=a[i?1][j?1]+a[i?1][j+1]a[i][n]=a[i?1][1]+a[i?1][n]?
#include<cstdio> using namespace std; int a[100][100],n,m; int main() {scanf("%d%d",&n,&m);a[0][1]=1;//初始化for (int i=1;i<=m;i++){a[i][1]=a[i-1][n]+a[i-1][2];//模擬傳球for (int j=2;j<n;j++)a[i][j]=a[i-1][j-1]+a[i-1][j+1];//模擬傳球a[i][n]=a[i-1][1]+a[i-1][n-1];//模擬傳球}printf("%d",a[m][1]);//傳m次到小蠻手上的種數(shù) }總結(jié)
- 上一篇: 电脑怎么传10G文件如何分享电脑文件
- 下一篇: 2018年10月17日普级B组【模拟赛】