J. WormTime Limit:1000msCase Time Limit:1000msMemory Limit:32768KB64-bit integer IO format:
%I64d Java class name:
MainSubmitStatusPID:
6295
Font Size:自從見識了平安夜蘋果的漲價後,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
40Hint第一組測試中有以下四種走法:2->1->2->1->22->1->2->3->22->3->2->1->22->3->2->3->2
解題思路:本題是簡單的動態規劃題目,只要找出動態方程即可。
動態方程:dp[i][j]=dp[i-1][j-1]+dp[i-1][j+1];第i秒毛毛蟲爬到第j棵樹上的路勁數為dp[i][j],其值為上一秒毛毛蟲爬到第j-1棵樹的路勁樹加上上一秒毛毛蟲爬到第j+1棵樹上的路勁數之和。
第0秒時。爬到第p棵樹的路勁數為1,爬到其他樹上的路勁數都為0。其他時候按動態規劃的動態轉移方程推算便可。曆時m秒,毛毛蟲爬到第t棵樹的路勁數為dp[m][t]的值。
#include<stdio.h>#include<string.h>int main(){ int n,p,m,t; int dp[102][102]; int i,j; 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++) dp[i][j]=dp[i-1][j-1]+dp[i-1][j+1]; printf("%d\n",dp[m][t]); } return 0;}