2 条题解
-
0
dfs版:
#include <bits/stdc++.h> using namespace std; typedef __int128 int128; int128 f[50][50]; int128 dfs(int n, int k) { if (k == 1 || n == k) return 1; if (f[n][k] != 0) return f[n][k]; return f[n][k] = dfs(n - 1, k - 1) + k * dfs(n - 1, k); } template <typename T> void qw(T x) { if (x > 9) qw(x / 10); putchar(x % 10 + 48); } int main() { int n, k; scanf("%d%d", &n, &k); memset(f, 0, sizeof(f)); qw(dfs(n, k)); return 0; }常规版:
#include <bits/stdc++.h> using namespace std; const int N = 55; __int128 f[N][N]; template <typename T> void qw(T x) { if (x / 10) qw(x / 10); putchar(x % 10 + 48); } int main() { int n, m; scanf("%d%d", &n, &m); f[0][0] = 1; for (int i = 1; i <= n; i++) for (int j = 1; j <= i; j++) f[i][j] = f[i - 1][j - 1] + j * f[i - 1][j]; qw(f[n][m]); return 0; } -
0
dfs版:
#include<bits/stdc++.h> using namespace std; typedef __int128 int128; int128 f[50][50]; int128 dfs(int n,int k) { if(k==1||n==k)return 1; if(f[n][k]!=0)return f[n][k]; return f[n][k]=dfs(n-1,k-1)+k*dfs(n-1,k); } template<typename T>void qw(T x) { if(x>9)qw(x/10); putchar(x%10+48); } int main() { int n,k;scanf("%d%d",&n,&k); memset(f,0,sizeof(f)); qw(dfs(n,k)); return 0; }常规版:
#include<bits/stdc++.h> using namespace std; const int N = 55; __int128 f[N][N]; template<typename T>void qw(T x) { if(x/10)qw(x/10); putchar(x%10+48); } int main() { int n, m;scanf("%d%d",&n,&m); f[0][0]=1; for(int i=1; i<=n; i++) for(int j=1; j<=i; j++) f[i][j]=f[i-1][j-1]+j*f[i-1][j]; qw(f[n][m]); return 0; }
- 1
信息
- ID
- 2034
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 6
- 标签
- 递交数
- 96
- 已通过
- 26
- 上传者