교란순열이다
dp[i] = (i-1) * (dp[i-1] + dp[i-2])
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int MOD = 1e9;
int n;
ll dp[1000000 + 5];
int main() {
cin.tie(0)->sync_with_stdio(0);
cin >> n;
dp[2] = 1;
for (int i = 3; i <= n; i++)
dp[i] = (i - 1) * (dp[i - 1] + dp[i - 2]) % MOD;
cout << dp[n] << "\n";
return 0;
}
'BOJ' 카테고리의 다른 글
[BOJ 16182] Dumae (0) | 2021.08.15 |
---|---|
[BOJ 17469] 트리의 색깔과 쿼리 (0) | 2021.08.14 |
[BOJ 2261] 가장 가까운 두 점 (0) | 2021.08.14 |
[BOJ 2682] 최대 사이클 1 (0) | 2021.08.12 |
[boj 1365] 꼬인 전깃줄 (0) | 2020.10.05 |