日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

4kyu Domino Tiling - 3 x N Board

發布時間:2025/3/21 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 4kyu Domino Tiling - 3 x N Board 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

4kyu Domino Tiling - 3 x N Board

題目背景:

A domino is a rectangular block with 2 units wide and 1 unit high. A domino can be placed on a grid in two ways: horizontal or vertical.

## or ##

You have infinitely many dominoes, and you want to fill a board that is N units wide and 3 units high:

<--- N ---> ############### ############### ###############

The task is to find the number of ways you can fill the given grid with dominoes.

The Twist
But you quickly realize that the answer is zero for any odd N, because (obviously) you can’t cover odd number of cells with dominoes! So you decide to introduce one unit block (1 unit wide and 1 unit high) to cover the final gap when needed (you don’t need this block when N is even).

The following shows some possible tilings for N = 5. Note that, unlike my previous Kata, the numbers do not represent the colors (they are just for convenience). Also note that the unit block (marked as ‘X’) can be placed anywhere on the board, making the answers for odd numbers way higher than even ones.

11255 1122X 14456 3X267 33447 13356 34467 55667 22X77

Since the answer will be very large, please give your answer modulo 12345787.

題目分析:

多米諾 2 * 1 拼圖問題其實是一個很經典的遞歸問題,本道題可以說是常見的多米諾問題中最難的一種,雖然只是遞歸問題,不過題目本身的分析難度仍舊相當大,接下來我將從最簡單的情況起步慢慢地分析:

  • 情景一

首先分析最簡單的情況,即N * 2的情況:

<--- N ---> ############### ############### 如圖可以找到遞歸關系,即 An = An-1 + An-2,也就是大名鼎鼎的斐波那契數列,初始化 A0 = A1 = 1,由此便可以輕易地碼出代碼。
  • 情景二

N只是偶數,高度為3的情況。
關于N只是偶數的情況在Geeksforgeeks有詳細的解答,此處我就直接盜圖orz。從最終的狀態分析,最后一列上呈現的狀況只可能是如下三種狀態:

而如下兩種情況不可能出現在最后一列中: 于是可以有: 那么得到第一步的遞推關系: An = An-2 + Bn-1 + Cn-1,因為Bn 和 Cn其實本質上是鏡面對稱的,所以可以說Bn-1 = Cn-1,則有 An = An-2 + 2 * Bn-1,再分析Bn: 得到Bn的遞推關系是:Bn = An-1 + Bn-2。 于是最終的遞推關系是: An = An-2 + 2 * Bn-1 Bn = An-1 + Bn-2

初始情況是:

A0 = 1, A1 = 0 B0 = 0, B1 = 1

據此可以碼出最終的代碼。

  • 情景三

N既可能是偶數有可能是奇數,同時高度為3,即本題中的情況:
首先依據情景二中的情況分析,當N為偶數時,從偶數下標開始遞推的話,有: A偶 = A偶 + B奇; B奇 = A偶 + B奇,可以發現對于N為偶數的情況時,遞推關系是沿著A偶 及 B奇的方向遞推的,所以我們此時應該分析的是A奇和B偶的情況:

  • 當A奇時,說明1 * 1 的方塊還沒使用,所以說可以考慮到1 * 1的方塊使用情況分析:
  • 即 An = Bn + Cn + An-2 + Bn-1 + Cn-1,從此處就可以發現,當Bn、Cn的下標為奇時,說明1*1的方塊已經使用了,所以我們需要考慮的是B偶的情況:
  • 當B偶時:
  • 即 Bn = An-1 + An-2 + Cn-1 + Bn-2 這樣得到的最后的遞推公式: 1. n為偶時: An = An-2 + 2 * Bn-1 Bn = An-1 + An-2 + Bn-1 + Bn-2 2. n為奇時: An = An-2 + 2 * Bn + 2 * Bn-1 Bn = An-1 + Bn-2

    初始情況是:

    A0 = 1, A1 = 2 B0 = 0, B1 = 1

    AC代碼:

    # segment the pics and find the law def countWays(n): A = [0] * (n + 1) B = [0] * (n + 1) A[0] = 1A[1] = 2B[0] = 0B[1] = 1for i in range(2, n + 1): if (i % 2):B[i] = (A[i - 1] + B[i - 2]) % 12345787A[i] = (A[i - 2] + 2 * B[i] + 2 * B[i - 1]) % 12345787else:A[i] = (A[i - 2] + 2 * B[i - 1]) % 12345787B[i] = (A[i - 1] + A[i - 2] + B[i - 1] + B[i - 2]) % 12345787return A[n]def three_by_n(n):return countWays(n)

    總結

    以上是生活随笔為你收集整理的4kyu Domino Tiling - 3 x N Board的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。