hdu2151: http://acm.hdu.edu.cn/showproblem.php?pid=2151
题意:给出n棵树、p、t分别表示虫的起始树和终点树,m为m分钟后到达t,求最多有多少中走法能从p到t,每次移动只能移向左或者右边的树
解法:dp:dp[i][j]表示到达第j棵树,前i分钟的走法数,则转移方程为:dp[i][j]=dp[i-1][j-1]+dp[i-1][j+1],注意初始化。
code:
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
int dp[150][150];
int main()
{
int n,p,m,t;
while(scanf("%d%d%d%d",&n,&p,&m,&t)!=EOF)
{
memset(dp,0,sizeof(dp));
dp[0][p]=1; //起点初始化为1
for(int i=1;i<=m;i++)
{
for(int j=1;j<=n;j++)
{
if(j-1>=1)
dp[i][j]+=dp[i-1][j-1];
if(j+1<=n)
dp[i][j]+=dp[i-1][j+1];
}
}
printf("%d\n",dp[m][t]);
}
}
/*input:
3 2 4 2
3 2 3 2
output:
4
0*/