Posted on 2010-08-05 13:38
MiYu 阅读(525)
评论(2) 编辑 收藏 引用 所属分类:
C/C++ 、
ACM ( DP )
//MiYu原创, 转帖请注明 : 转载自 ______________白白の屋题目地址:
http://acm.hdu.edu.cn/showproblem.php?pid=2151题目描述:
自从见识了平安夜苹果的涨价后,Lele就在他家门口水平种了一排苹果树,共有N棵。
突然Lele发现在左起第P棵树上(从1开始计数)有一条毛毛虫。为了看到毛毛虫变蝴蝶的过程,Lele在苹果树旁观察了很久。虽然没有看到蝴蝶,但Lele发现了一个规律:每过1分钟,毛毛虫会随机从一棵树爬到相邻的一棵树上。
比如刚开始毛毛虫在第2棵树上,过1分钟后,毛毛虫可能会在第1棵树上或者第3棵树上。如果刚开始时毛毛虫在第1棵树上,过1分钟以后,毛毛虫一定会在第2棵树上。
现在告诉你苹果树的数目N,以及毛毛刚开始所在的位置P,请问,在M分钟后,毛毛虫到达第T棵树,一共有多少种行走方案数。
int a[M][T] ; 表示虫子 第 M 分钟时在 第T颗树的方法数
状态转移方程为 : a[M][T] = a[M-1][T-1] + a[M-1][T + 1];
代码如下:
//MiYu原创, 转帖请注明 : 转载自 ______________白白の屋
#include<iostream>
int main()
{
int cmt[105][105];
int N,P,M,T;
while ( scanf ( "%d%d%d%d",&N,&P,&M,&T ) != EOF )
{
memset ( cmt, 0, sizeof ( cmt) );
cmt[M][T] = 1;
for ( int i = M - 1; i >= 0; i-- )
{
for ( int j = 1;j <= N; j ++ )
{
if ( j - 1 > 0 )
{
cmt[i][j] += cmt[i+1][j-1];
}
if ( j + 1 <= N )
{
cmt[i][j] += cmt[i+1][j+1];
}
}
}
printf ( "%d\n",cmt[0][P] );
}
return 0;
}