题目链接:https://vijos.org/p/1485
思路:dp[i][j]=dp[i-1][j-1]+dp[i-1][j+1] ,dp[i][j]表示经过i次到达j的次数。
详细代码:
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=1e3+100;
int dp[maxn][maxn];
int main()
{
int n,m;
scanf("%d%d",&n,&m);
int i,j,k;
memset(dp,0,sizeof dp);
dp[0][0]=1;
for(i=1;i<=m;i++)
{
dp[i][0]=dp[i-1][n-1]+dp[i-1][1];
dp[i][n-1]=dp[i-1][n-2]+dp[i-1][0];
for(j=1;j<n-1;j++)
{
dp[i][j]=dp[i-1][j-1]+dp[i-1][j+1];
}
}
cout<<dp[m][0]<<endl;
return 0;
}