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;
}
posted @ 2021-12-06 20:45  Horb7  阅读(92)  评论(0编辑  收藏  举报