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