NOIP2008 传球游戏
NOIP2008 传球游戏
题意
有 \(n\) 个同学围成一个圆圈,有一个球在某一个小蛮手中,每次传球可以向左右传球,问有多少种方案能够使得进行 \(m\) 次传球后依然在小蛮手中。
分析
每一轮,拿到球的同学都可以向左右传球。
设 \(f(i, j)\) 表示第 \(i\) 次传球后小球在 \(j\) 同学手中的方案数量。注意环形。
Code
#include <iostream>
using namespace std;
const int N = 35;
int f[N][N]; // f(i, j)表示穿了i次传到j手里的方案数
int main ()
{
int n, m; cin >> n >> m;
f[0][1] = 1;
for (int i = 1; i <= m; i ++ )
for (int j = 1; j <= n; j ++ )
f[i][j] = f[i-1][j==1?n:j-1] + f[i-1][j==n?1:j+1];
cout << f[m][1] << endl;
return 0;
}