P1057 传球游戏 (DP)

题目传送门

题意:n个人传球,求从1开始传,传m次传给1的方案数。

思路:

AC代码:
sol1:取模的方法:

#include<cstdio>
int a[35][35];
int main(){
	int n,m;
	scanf("%d%d",&n,&m);
	a[0][0]=1;
	for(int i=0;i<m;i++)
		for(int j=0;j<n;j++)
			a[i+1][(j-1+n)%n]+=a[i][j],a[i+1][(j+1)%n]+=a[i][j];
	printf("%d\n",a[m][0]);
	return 0;
}

sol2:特判1和n

#include<cstdio>
int a[35][35];
int main(){
	int n,m;
	scanf("%d%d",&n,&m);
	a[0][1]=1;
	for(int i=1;i<=m;i++)
		for(int j=1;j<=n;j++)
		{
			if(j==1) a[i][j]=a[i-1][n]+a[i-1][2];
			else if(j==n) a[i][j]=a[i-1][n-1]+a[i-1][1];
			else a[i][j]=a[i-1][j-1]+a[i-1][j+1];
		}
	printf("%d\n",a[m][1]);
	return 0;
}