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;
}