比较明显的数塔问题,只是这是求方案总数
动归方程稍微变化下,把Max变成Sum,有点像背包求方案总数
dp[i][j]=dp[i+1][j-1]+dp[i+1][j+1]
同样边界单独求下.
代码:
#include<stdio.h> #include<string.h> int dp[110][110]; int main() { int i,j; int n,p,m,t; while(scanf("%d%d%d%d",&n,&p,&m,&t)!=EOF) { memset(dp,0,sizeof(dp)); dp[m][t]=1; for(i=m-1;i>=0;i--) { for(j=1;j<=n;j++) { if(j==1) { dp[i][j]=dp[i+1][j+1]; } else if(j==n) dp[i][j]=dp[i+1][j-1]; else dp[i][j]=dp[i+1][j-1]+dp[i+1][j+1]; } } printf("%d\n",dp[0][p]); } return 0; }