題目連結:
題目大意:
在一個二維平面上,每走一步為一個單位。而現規定每一步只能往上、往右、往左走,且不能走到前面走過的點上。
現給定一正整數 N (0 < N ≦ 10, 000),代表走 N 步。求走 N 步的方法數,並將結果取 12, 345 的餘數。
範例輸入:
【範例輸入一】
2
【範例輸入二】
1
範例輸出:
【範例輸出一】
7
【範例輸出二】
3
解題思維:
一樣是典型的DP(動態規劃)的題型。
由於走 N 步的時候,向左走、向右走的走法是不會相鄰在一起的(不然就會走到走過的點)。因此我們能得出:
「向左走」後,下一步只能接「向左走」或是「向上走」。
「向上走」後,下一步可以接著任意走法。
「向右走」後,下一步只能接「向上走」或是「向右走」。
因此我們可以得出一DP陣列 W ij , i 代表走了 i 步, j 代表以 j 為結尾的走法( 0 代表「向左」、 1 代表「向上」、 2 代表「向右」),並按照以上規律得:
W i0 = W (i - 1)0 + W (i - 1)1
W i1 = W (i - 1)0 + W (i - 1)1 + W (i - 1)2
W i2 = W (i - 1)1 + W (i - 1)2
然後,在作運算時,就各自取 12345 的餘數。即可求出方法數 =
(W N0 + W N1 + W N2) Mod 12345
此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。