Skip to content

牛客网 NC205036 答题卡 动态规划#

目录#

1. 题目描述#

1.1. Limit#

Time Limit: 1000 ms

Memory Limit: 131072 kB

1.2. Problem Description#

牛牛即将要参加考试,他学会了填答题卡。

可惜他竖着的答题卡填成了横着的 : (

好奇的他想知道对于 道题,每道题 个选项的答题卡 ( 的矩阵 ),满足横答题卡和竖答题卡图形一致的方案数有多少种。

注:每道题只能选择一个选项,即 的矩阵中只能涂黑 个空。求横竖对称的方案数。


1.3. Input#

第一行给出


1.4. Output#

输出方案数,答案对 取模


1.5. Sample Input#

3

1.6. Sample Output#

4

1.7. Notes#

1.8. Source#

牛客网 NC205036 答题卡


2. 解读#

每当矩阵的维度 增加1时,可以分为两种情况计算。

如果矩阵第 行的元素坐标为 ,即在矩阵的右下角时,则原先的 维矩阵可以取 种情况。

如果矩阵第 行的元素坐标为 时,则第 行的坐标也被确定了,为,其余的 行可以取 种情况。

则递推方程为

可以化为

如当 变为 时,过程如下所示。

  1. 时,有两种情况。

  1. 且新增的元素在 位置时,有 种情况

  1. 且新增的元素在 位置时,有 种情况。

所以

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;
}

联系邮箱:curren_wong@163.com

Github:https://github.com/CurrenWong

欢迎转载/Star/Fork,有问题欢迎通过邮箱交流。

Back to top