传球游戏
题目
输入
一行,有两个用空格隔开的整数 nnn,mmm
输出
111个整数,表示符合题意的方法数
输入样例
3 3
输出样例
2
解题思路
我们设f[i,j]f[i,j]f[i,j]表示传球经过j个人后在第i个同学手上的方法数,那么我们就可以得到递推式:
f(i,j)=f(i−1,j−1)+f(i+1,j−1)f(i,j) = f(i - 1,j - 1) + f(i + 1,j - 1)f(i,j)=f(i−1,j−1)+f(i+1,j−1)
由于是个环,所以要另外判断 i=1i = 1i=1 或 i=ni = ni=n
程序如下
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n, m, f[10001][10001];
int main()
{
scanf("%d%d",&n,&m);
f[1][0] = 1;
for(int i = 1; i <= m; ++i)
{
for(int j = 1; j <= n; ++j)
{
if(j == 1) f[j][i] = f[j + 1][i - 1] + f[n][i - 1];
else if(j == n) f[j][i] = f[j - 1][i - 1] + f[1][i - 1];
else f[j][i] = f[j + 1][i - 1] + f[j - 1][i - 1];
}
}
printf("%d",f[1][m]);
return 0;
}