DP【洛谷P1057】

直接上链接吧: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好难啊,真的不会做

猜你喜欢

转载自blog.csdn.net/KIKO_caoyue/article/details/83271578