DFSA超时,看题解使用DP 确实很精妙
令arr [ i ] [ j ] 表示第 i 步到达 j 有几种方法
arr数组初始为0 arr[ 0 ][ p ]为 1
公式arr[ i ][ j ]=arr[ i ][ j ]=arr[ i-1 ][ j-1 ]+arr[ i-1 ][ j+1 ]
每一步的 j 都是上一步的 j 的两边相加,因为初始为0,包含边界点
#include <bits/stdc++.h>
using namespace std;
int n,p,m,t,cnt;
int main()
{
//freopen("C:\\Users\\Lenovo\\Desktop\\input.txt","r",stdin);
while (~scanf("%d%d%d%d",&n,&p,&m,&t))
{
int arr[101][101] ={0};
arr[0][p]=1;
for(int i=1;i<=m;i++)
{
for(int j=1;j<=n;j++)
arr[i][j]=arr[i-1][j-1]+arr[i-1][j+1];
}
cout<<arr[m][t]<<endl;
}
return 0;
}