TAG 动态规划
设f[i][j] 为传 i 次,传到同学 j 有多少种方法。(小蛮编号为0)。
f[i][j] = f[i-1][ (j+1)%n ]+ f[i-1][ (j+n-1)%n ] ,即由相邻的同学再传一次,便能到达 j 手中。
#include <stdio.h> #include <memory.h> int dp[31][30]; int n,m; int main(int argc, char *argv[]) { while ( scanf("%d%d", &n, &m)!=EOF ) { memset(dp, 0, sizeof(dp)); dp[0][0]=1; for (int i=1; i<=m; ++i) { for (int j=0; j<n; ++j) { dp[i][j]=dp[i-1][(j+1)%n]+dp[i-1][(j+n-1)%n]; } } printf("%d/n",dp[m][0] ); } return 0; }
本文通过动态规划的方法解决了一个特定的传球问题:在一排n名同学中,从第一个人开始传球m次,最终回到第一个人手中的传球方案数。使用二维数组f[i][j]来记录传i次球后球落在第j位同学手中的方案数。
2123

被折叠的 条评论
为什么被折叠?



