一、判断是否可以用递归

1.原问题:

小球从小曼手里传出去经过三次传递又回到小曼手里的可能方案数。

子问题:

从1开始传球第i次传递时到达j的手里的方法数

符合具有相同子问题的条件

2.符合最优决策:

3.解决当前的决策与之前怎么决策的没有关系

满足无后效性

二、递推公式易错,因为是环形站位,所以还要注意取模,并且是从1开始,与平常的循环的写的方式不一样,要推一下怎么写。

三、每次传递可以由左边那个人传递过来,也可以从右边。

#include<bits/stdc++.h>
using namespace std;
int n,m;
const int M=50;
long long dp[M][M];
int main(){
    cin>>n>>m;
    dp[0][1]=1;
    for(int i=1;i<=m;i++){
        for(int j=1;j<=n;j++){
            dp[i][j]=dp[i-1][((j-2+n)%n)+1]+dp[i-1][((j+n)%n)+1];
        }
    }
    cout<<dp[m][1]<<endl;
    return 0;
}