这题思路和数塔游戏/走楼梯 类似,都是找当前位置,是由哪个位置转移过来的,
只要在转移的过程中,找出状态是怎么变的即可
初始化:
dp[1][0]=1:没传的时候在1位置
dp[2][1]=1:1向右传
dp[n][1]=1:1向左传
dp[i][1]=0:其他位置传一步不能传到为0(不用初始化,因为默认为0)
代码:
#include<iostream>
using namespace std;
int n,m;
int dp[31][31];
int main(){
cin>>n>>m;
dp[1][0]=1;
dp[2][1]=1;
dp[n][1]=1;
for(int j=1;j<=m;j++){
for(int i=1;i<=n;i++){
if(i!=n&&i!=1)
dp[i][j]=dp[i+1][j-1]+dp[i-1][j-1];
else if(i==n){
dp[i][j]=dp[1][j-1]+dp[i-1][j-1];
}
else
{
dp[i][j]=dp[i+1][j-1]+dp[n][j-1];
}
}
}
cout<<dp[1][m];
}