洛谷P1057 传球问题
分析:经过m次传球到第i个人的方法可以由经过m-1次传球到第i个人和到第i-1个人传递得来
设dp[i][j]为经过j次传球后到达第i个人的方法数,可得到状态转移方程为:
dp[i][j]=dp[i-1][j-1]+dp[i+1][j-1];
写循环时注意状态转移是跟着人来的,每次传球每个人的方法数都会变,依次确定循环次序
代码:
1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 const double pi=acos(-1); 5 int dp[35][35]; 6 int main(){ 7 int n,m;scanf("%d%d",&n,&m); 8 dp[1][0]=1; 9 for(int i=1;i<=m;i++){ 10 dp[1][i]=dp[2][i-1]+dp[n][i-1]; 11 dp[n][i]=dp[n-1][i-1]+dp[1][i-1]; 12 for(int j=2;j<n;j++){ 13 dp[j][i]=dp[j-1][i-1]+dp[j+1][i-1]; 14 } 15 } 16 cout<<dp[1][m]<<endl; 17 return 0; 18 }