http://acm.hdu.edu.cn/showproblem.php?pid=2151
简单dp,动态转移方程:dp[N][T]=dp[N-1][T-1]+dp[N-1][T+1],注意判断边界是否存在
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include<stdio.h> #include<string.h> int main() { int N,P,M,T,i,j; int dp[110][110]; while(scanf("%d%d%d%d",&N,&P,&M,&T)!=EOF) { memset(dp,0,sizeof(dp)); dp[0][P]=1; for(i=1;i<=M;i++) for(j=1;j<=N;j++) { if(j-1>0) { dp[i][j]+=dp[i-1][j-1]; } if(j+1<=N) { dp[i][j]+=dp[i-1][j+1]; } } printf("%d ",dp[M][T]); } return 0; }