传球游戏
题目链接:传球游戏
题目描述
解题思路
这道题比较简单。
很明显一个人可以从他的两边获得球,那么也就是可以从两边得到贡献。
则递推式为:
f
i
,
j
=
f
i
−
1
,
j
−
1
+
f
i
−
1
,
j
+
1
f_{{i},{j}}=f_{{i-1},{j-1}}+f_{{i-1},{j+1}}
fi,j=fi−1,j−1+fi−1,j+1
给
f
0
,
1
f_{{0},{1}}
f0,1附
1
1
1 的初值,
j
=
n
j=n
j=n 或
j
=
0
j=0
j=0 时特判一下即可。
code
#include<iostream>
#include<cstdio>
#define int long long
using namespace std;
int n,m;
int f[40][40];
signed main()
{
cin>>n>>m;
f[0][1]=1;
for(int i=1;i<=m;i++)
for(int j=1;j<=n;j++)
{
if(j==1)
f[i][j]=f[i-1][n]+f[i-1][2];
else if(j==n)
f[i][j]=f[i-1][n-1]+f[i-1][1];
else
f[i][j]=f[i-1][j+1]+f[i-1][j-1];
}
cout<<f[m][1]<<endl;
}