切換
舊版
前往
大廳
主題

ZeroJudge - c731: 走路時要算數學 解題心得

Not In My Back Yard | 2018-12-06 21:10:58 | 巴幣 0 | 人氣 221

題目連結:


題目大意:
在一個二維平面上,每走一步為一個單位。而現規定每一步只能往上、往右、往左走,且不能走到前面走過的點上。

現給定一正整數 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 代表「向右」),並按照以上規律得:
i0 = W (i - 1)0 + W (i - 1)1
i1 = W (i - 1)0 + W (i - 1)1 + W (i - 1)2
i2 = W (i - 1)1 + W (i - 1)2

然後,在作運算時,就各自取 12345 的餘數。即可求出方法數 =
(W N0 + W N1 + W N2) Mod 12345




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

更多創作