1. 程式人生 > >[jzoj]5965. 【NOIP2018提高組D2T2】填數遊戲(推式子)

[jzoj]5965. 【NOIP2018提高組D2T2】填數遊戲(推式子)

Problem

  • 給定你一個 n m n·m 網格棋盤,要求用 0 /

    1 0/1 填充每一個格子.

  • 使得任意兩條從原點 ( 0 , 0 )

    (0,0) ( n 1 , m
    1 ) (n-1,m-1)
    的不完全相交路徑,先走右方向(字典序大)的路徑的 01 01 路徑字典序相對小.

  • 求方案數.

Data constraint

  • n 8 , m 1 0 6 n\le 8, m \le 10^6

Solution

  • 其實這題可以不用 D P DP .

  • 顯然對於棋盤上的某一種填法 A A ,滿足 i ( 0 , n ) , j ( 0 , m ) , A i , j A i 1 , j + 1 \forall i\in(0,n),j\in(0,m),A_{i,j}\ge A_{i-1,j+1}

  • 且顯然如果當 A i , j = A i 1 , j + 1 A_{i,j}=A_{i-1,j+1} 時, ( i , j + 1 ) ( n , m ) (i,j+1)\rightarrow(n,m) 形成一個封閉局面,這個局面的每條對角線上的數必須相同,這樣是為了保證 ( i , j + 1 ) ( n , m ) (i,j+1)\rightarrow(n,m) 的每條路徑相同.

  • 那麼現在就可以分類討論了:

    • ( 0 , 1 ) , ( 1 , 0 ) (0,1),(1,0) 兩格相同:

      • 這種情況下,只需要使得 ( 1 , 1 ) ( n , m ) (1,1)\rightarrow(n,m) 的所有對角線上數字相同.

      • 同時第一列和第一行會受其影響,仔細推一波式子可以搞定.

      • 答案形如 4 x 3 y 2 z 4^x*3^y*2^z .

      • 這是最簡單的情況。

    • ( 0 , 1 ) , ( 1 , 0 ) (0,1),(1,0) 兩格不同:

      • ( 0 , 2 ) , ( 1 , 1 ) , ( 2 , 0 ) (0,2),(1,1),(2,0) 相同:

        • 這一種情況也相對簡單,也是一波式子可以搞定的.

        • 這是次簡單的情況,其實與第一種情況完全類似,答案的形式也是一樣的.

      • ( 0 , 2 ) , ( 1 , 1 ) , ( 2 , 0 ) (0,2),(1,1),(2,0) 其中一對相同:

        • 不難發現 ( 1 , 1 ) (1,1) ( 2 , 0 ) (2,0) ( 0 , 2 ) (0,2) 相同是等價的.

        • 不妨假設 ( 1 , 1 ) , ( 2 , 0 ) (1,1),(2,0) 相同.

        • f [ i ] f[i] 表示到第 i i 條對角線上時,在前兩行的第 i 1 i-1 斜線上及以前有過“配對成功”的方案數。

        • “配對成功” 是指在最上邊兩行中,第二行的某一格與其斜上方的格相同,稱之為配對成功。

        • 因為一旦配對成功,接下來第二行的填數就會有限制.

        • 當第一行與第二行全部沒有配對成功時,當前的一條對角線實際上有 5 5 種填法,而當 i i 條對角線配對成功時,實際上只有 4 4 種填法.

        • 那麼考慮一下轉移就可以寫出: f [ i ] = f [ i 1 ] 4 + 4 5 f[i] = f[i - 1] * 4 + 4 * 5

        • 表示的含義是:

        • (在 i 2 i-2 條斜線上以前就匹配成功的方案 f [ i 1 ] f[i-1] ) *(當前第 i i 條對角線的 4 4 種填法) + ( i 1 i-1 條斜線第一次匹配成功 4 4 種填法) * (當前第 i i 條對角線因不受任何影響所以有 5 5 種填法.)

  • 這樣就可以計算出當 n = m n=m 的答案了.

  • m = n + 1 m = n + 1 時,前兩種分類討論是很容易繼續推廣的,關鍵是第三種 分類討論應當如何推廣.

  • 不妨畫一下圖,我們發現,實質上答案是 A N S = ( 4 + 4 4 + ( f [ n ] 3 + 4 3 ) 2 ) 2 n 1 ANS=(4 + 4 * 4 + (f[n] * 3 + 4 * 3) * 2) * 2^{n-1}

  • 至於為什麼也是按上面第三種分類討論一樣,根據最後一條對角線是否匹配成功進行討論.

  • 而當 m = n + 1 m=n+1 時, ( 2 , 0 ) , ( 1 , 1 ) , ( 0 , 2 ) (2,0),(1,1),(0,2)