直接上链接吧:https://www.luogu.org/problemnew/show/P1057
这题一看就是个DP,所以我不会做。
直接上思路:
dp[i][k]表示经过k次传球,传到i手中的方案数,所以dp[i][k] = dp[i-1][k-1]+dp[i+1][k-1] (i==1 || i==n需单独考虑)
下面上代码:
#include <bits/stdc++.h>
using namespace std;
const int maxn = 40;
int dp[maxn][maxn];
int main()
{
int n,m;
cin>>n>>m;
dp[1][0] = 1;
for(int k=1;k<=m;k++)
{
dp[1][k] = dp[2][k-1]+dp[n][k-1];
for(int i=2;i<=n-1;i++)
{
dp[i][k] = dp[i-1][k-1]+dp[i+1][k-1];
}
dp[n][k] = dp[1][k-1]+dp[n-1][k-1];
}
cout<<dp[1][m]<<endl;
return 0;
}
DP好难啊,真的不会做