Solution
先给一个非常规的解法, 打暴力找
直接看 (公式), 有
这时候点进去找 是什么, 得到下面结果
令
有递推式子
于是
打暴力Code
int ans, n;
int maze[105][105];
void dfs(int x) {
if(x == n + 1) {
int flag = 0;
for(int i = 1; i <= n; i++) {
for(int j = 1; j <= n; j++) {
if(maze[i][j] != maze[j][i]) {
flag = 1;
}
}
}
if(!flag) ans++;
return ;
}
for(int i = 1; i <= n; i++) {
maze[x][i] = 1;
dfs(x + 1);
maze[x][i] = 0;
}
} Code
/*
autor: Kurisu
2020年4月30日16:48:49
*/
#include<bits/stdc++.h>
using namespace std;
const long long inf = 1e18;
const int N = 1e5 + 5;
const double eps = 1e-10;
const int mod = 1e9 + 7;
typedef long long ll;
int n;
ll fun(ll x) {
return x >= mod ? x % mod : x;
}
ll dp[N];
int main() {
scanf("%d", &n);
dp[2] = 1, dp[3] = 3;
for(int i = 4; i <= n; i++) {
dp[i] = fun(dp[i - 1] + (1 + dp[i - 2]) * (i - 1));
}
printf("%lld\n", dp[n] + 1);
return 0;
}
// 3 + 2 * 3 = 9 
京公网安备 11010502036488号