暑假集训第二周——递推 X - 毛毛虫走路

来源:互联网 发布:上海大众数据服务中心 编辑:程序博客网 时间:2024/06/12 01:21


X -毛毛虫走路
Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u
Submit Status

Description

自从见识了平安夜苹果的涨价后,Lele就在他家门口水平种了一排苹果树,共有N棵。 

突然Lele发现在左起第P棵树上(从1开始计数)有一条毛毛虫。为了看到毛毛虫变蝴蝶的过程,Lele在苹果树旁观察了很久。虽然没有看到蝴蝶,但Lele发现了一个规律:每过1分钟,毛毛虫会随机从一棵树爬到相邻的一棵树上。 

比如刚开始毛毛虫在第2棵树上,过1分钟后,毛毛虫可能会在第1棵树上或者第3棵树上。如果刚开始时毛毛虫在第1棵树上,过1分钟以后,毛毛虫一定会在第2棵树上。 

现在告诉你苹果树的数目N,以及毛毛刚开始所在的位置P,请问,在M分钟后,毛毛虫到达第T棵树,一共有多少种行走方案数。 
 

Input

本题目包含多组测试,请处理到文件结束(EOF)。 
每组测试占一行,包括四个正整数N,P,M,T(含义见题目描述,0<N,P,M,T<100) 
 

Output

对于每组数据,在一行里输出一共的方案数。 
题目数据保证答案小于10^9 
 

Sample Input

3 2 4 23 2 3 2
 

Sample Output

40

Hint

 第一组测试中有以下四种走法: 2->1->2->1->2 2->1->2->3->2 2->3->2->1->2 2->3->2->3->2 
 

这个题是用DP好解决的,状态:f[i][j]=f[i-1][j-1]+f[i-1][j+1],其中I表示的是第I分钟,J表示的是当前位置,要到当前位置,可能从右边过来,也可以从左边过来;


1234567891011121314151617181920
#include<iostream>#include<cstring>using namespace std;int main(){    int n,p,m,t,i,j,a[101][101];    while(cin>>n>>p>>m>>t)    {        memset(a,0,sizeof(a));        if(p<n)            a[1][p+1]=1;        if(p>1)            a[1][p-1]=1;        for(i=2; i<=m; i++)            for(j=1; j<=n; j++)                a[i][j]=a[i-1][j-1]+a[i-1][j+1];        cout<<a[m][t]<<endl;    }    return 0;}

0 0
原创粉丝点击