牛客網 NC205036 答題卡 動態規劃

1. 題目描述

1.1. Limit

Time Limit: 1000 ms

Memory Limit: 131072 kB

1.2. Problem Description

牛牛即將要參加考試,他學會了填答題卡。

可惜他豎着的答題卡填成了橫着的 : (

好奇的他想知道對於 nn 道題,每道題 nn 個選項的答題卡 ( n×nn \times n 的矩陣 ),滿足橫答題卡和豎答題卡圖形一致的方案數有多少種。

注:每道題只能選擇一個選項,即 n×nn \times n 的矩陣中只能塗黑 nn 個空。求橫豎對稱的方案數。


1.3. Input

第一行給出 nn


1.4. Output

輸出方案數,答案對 109+710^9 +7 取模


1.5. Sample Input

3

1.6. Sample Output

4

1.7. Notes

()()()() \begin{pmatrix} \blacksquare & \square & \square \\ \square & \blacksquare & \square \\ \square & \square & \blacksquare \\ \end{pmatrix} \Bigg| \begin{pmatrix} \square & \blacksquare & \square \\ \blacksquare & \square & \square \\ \square & \square & \blacksquare \\ \end{pmatrix} \Bigg| \begin{pmatrix} \blacksquare & \square & \square \\ \square & \square & \blacksquare \\ \square & \blacksquare & \square \\ \end{pmatrix} \Bigg| \begin{pmatrix} \square & \square & \blacksquare \\ \square & \blacksquare & \square \\ \blacksquare & \square & \square \\ \end{pmatrix}

1.8. Source

牛客網 NC205036 答題卡


2. 解讀

每當矩陣的維度 nn 增加1時,可以分爲兩種情況計算。

如果矩陣第 n+1n + 1 行的元素座標爲 (n+1,n+1)(n + 1, n + 1),即在矩陣的右下角時,則原先的 n×nn \times n 維矩陣可以取 f(n)f(n) 種情況。

如果矩陣第 n+1n + 1 行的元素座標爲 (n+1,x)(n + 1, x)x[1,n]x \in [1, n]時,則第 xx 行的座標也被確定了,爲(x,n+1)(x, n + 1),其餘的 n1n - 1 行可以取 f(n1)f(n - 1) 種情況。

則遞推方程爲 f(n+1)=f(n)+n×f(n1)f(n + 1) = f(n) + n \times f(n-1)

可以化爲 f(n)=f(n1)+(n1)×f(n2)f(n) = f(n - 1) + (n - 1) \times f(n-2)


如當 nn22 變爲 33 時,過程如下所示。

  1. n=2n = 2 時,有兩種情況。

()() \begin{pmatrix} \blacksquare & \square \\ \square & \blacksquare \\ \end{pmatrix} \Bigg| \begin{pmatrix} \square & \blacksquare \\ \blacksquare & \square \\ \end{pmatrix}

  1. n=3n = 3 且新增的元素在 (3,3)(3, 3) 位置時,有 f(2)=2f(2) = 2 種情況

()()()() \begin{pmatrix} \blacksquare & \square \\ \square & \blacksquare \\ \end{pmatrix} \to \begin{pmatrix} \blacksquare & \square & \square \\ \square & \blacksquare & \square \\ \square & \square & \blacksquare \\ \end{pmatrix} \Bigg| \begin{pmatrix} \square & \blacksquare \\ \blacksquare & \square \\ \end{pmatrix} \to \begin{pmatrix} \square & \blacksquare & \square \\ \blacksquare & \square & \square \\ \square & \square & \blacksquare \\ \end{pmatrix}

  1. n=3n = 3 且新增的元素在 (3,x)(3, x)x[1,2]x \in [1,2] 位置時,有 2×f(1)=22 \times f(1) = 2 種情況。

()() \begin{pmatrix} \square & \square & \blacksquare \\ \square & \blacksquare & \square \\ \blacksquare & \square & \square \\ \end{pmatrix} \Bigg| \begin{pmatrix} \blacksquare & \square & \square \\ \square & \square & \blacksquare \\ \square & \blacksquare & \square \\ \end{pmatrix}

所以 f(3)=f(2)+2×f(1)=2+2=4f(3) = f(2) + 2 \times f(1) = 2 + 2 = 4

3. 代碼

#include<iostream>
using namespace std;
const int mod=1e9+7;
const int N=1e5+10;
typedef long long ll;
ll n;
ll f[N];
int main() {
    int i;
    cin>>n;
    f[1]=1; f[2]=2;
    for (i=3;i<=n;i++)
        f[i]=(f[i-1]+(i-1)*f[i-2]%mod)%mod;
    cout<<f[n]<<endl;
    return 0;
}

聯繫郵箱:[email protected]

Github:https://github.com/CurrenWong

歡迎轉載/Star/Fork,有問題歡迎通過郵箱交流。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章