P1057 传球游戏——小学生dp
设f[i][j]为第i次传到j的方案数;
f[0][1]=1;
单独处理开头和结尾;
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int maxn=100; int f[maxn][maxn]; int n,m; int main() { scanf("%d%d",&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][j-1]+f[i-1][1]; } else f[i][j]+=f[i-1][j-1]+f[i-1][j+1]; } } printf("%d",f[m][1]); return 0; }