Thinking Process

两种传球方式,一个向左边一个向右边。先不考虑环的情况,直接看链。
Assumption:以第二个人为例子。他只能从第一个人和第三个人手里拿到球。Likewise, it's the same when it comes to i-th person.

状态方程

DEFINATION

f[i][j]:球传了j次后到第i个人手里的方案数

EQUATION
f[i][j] = f[i - 1][j - 1] + f[i + 1][j - 1]
f[1][0] = 1
特别地,第一个人是从第n个人手里拿球和第二个人手里拿球,第n个人是从第n-1个人手里拿球和第1个人手里拿球

Code

#include<iostream>
using namespace std;

int n, m;

int f[40][40];

int main() {
    cin >> n >> m;
    f[1][0] = 1;
    for(int j = 1;j <= m;j ++) {
        for(int i = 1;i <= n;i ++) {
            if(i == 1) f[i][j] = f[2][j - 1] + f[n][j - 1];
            else if(i == n) f[i][j] = f[n - 1][j - 1] + f[1][j - 1];
            else f[i][j] = f[i - 1][j - 1] + f[i + 1][j - 1];
        } 
    }
    cout << f[1][m];
}