题目:
code:
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,m,dp[32][32];
memset(dp,0,sizeof(dp));
cin>>n>>m;
dp[0][n]=1;//初始花在第n位同学手中
for(int i=1;i<=m;++i){
for(int j=1;j<=n;++j){
if(j==1){
dp[i][j] = dp[i-1][2]+dp[i-1][n];
}
else if(j==n){
dp[i][j] = dp[i-1][n-1]+dp[i-1][1];
}
else dp[i][j] = dp[i-1][j-1]+dp[i-1][j+1];
}
}
// for(int i=0;i<=m;++i){
// for(int j=1;j<=n;++j){
// cout<<dp[i][j]<<" ";
// }
// cout<<"\n";
// }
cout<<dp[m][n]<<endl;
return 0;
}
再精炼一些可以这样写:
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,m,dp[32][32];
memset(dp,0,sizeof(dp));
cin>>n>>m;
dp[0][n]=1;//编号1-n,初始花在第n位同学手中
for(int i=1;i<=m;++i){
for(int j=1;j<=n;++j){
dp[i][j] = dp[i-1][j-1==0?n:j-1]+dp[i-1][j+1==n+1?1:j+1];
}
}
cout<<dp[m][n]<<endl;
return 0;
}