牛客网 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#
2. 解读#
每当矩阵的维度 增加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,有问题欢迎通过邮箱交流。